php

2010-06-11 7 views
8

में पेज रीडायरेक्ट के बाद सत्र खो गया जब मैं php हेडर रीडायरेक्शन का उपयोग करता हूं तो सभी सत्र चर खो जाते हैं ... कुछ लोग कहते हैं कि बाहर निकलें(); हेडर के बाद (""); समस्या हल हो जाएगी लेकिन यह समाधान नहीं प्रतीत होता है ...php

क्या कोई मदद कर सकता है?

यहाँ कैसे मैं सत्र में चर की दुकान है:

include 'dbc.php'; 

$err = array(); 

foreach($_GET as $key => $value) { 
    $get[$key] = filter($value); //get variables are filtered. 
} 

if ($_POST['doLogin']=='Login') 
{ 

foreach($_POST as $key => $value) { 
    $data[$key] = filter($value); // post variables are filtered 
} 


$user_email = $data['usr_email']; 
$pass = $data['pwd']; 


if (strpos($user_email,'@') === false) { 
    $user_cond = "user_name='$user_email'"; 
} else { 
     $user_cond = "user_email='$user_email'"; 

} 


$result = mysql_query("SELECT `id`,`pwd`,`full_name`,`approved`,`user_level` FROM users WHERE 
      $user_cond 
      AND `banned` = '0' 
      ") or die (mysql_error()); 
$num = mysql_num_rows($result); 

    // Match row found with more than 1 results - the user is authenticated. 
    if ($num > 0) { 

    list($id,$pwd,$full_name,$approved,$user_level) = mysql_fetch_row($result); 

    if(!$approved) { 
    //$msg = urlencode("Account not activated. Please check your email for activation code"); 
    $err[] = "Account not activated. Please check your email for activation code"; 

    //header("Location: login.php?msg=$msg"); 
    //exit(); 
    } 

     //check against salt 
    if ($pwd === PwdHash($pass,substr($pwd,0,9))) { 
    // this sets session and logs user in 
     session_start(); 
     session_regenerate_id (true); //prevent against session fixation attacks. 

     // this sets variables in the session 
     $_SESSION['user_id']= $id; 
     $_SESSION['user_name'] = $full_name; 
     $_SESSION['user_level'] = $user_level; 
     $_SESSION['HTTP_USER_AGENT'] = md5($_SERVER['HTTP_USER_AGENT']); 

     //update the timestamp and key for cookie 
     $stamp = time(); 
     $ckey = GenKey(); 
     mysql_query("update users set `ctime`='$stamp', `ckey` = '$ckey' where id='$id'") or die(mysql_error()); 

     //set a cookie 

     if(isset($_POST['remember'])){ 
        setcookie("user_id", $_SESSION['user_id'], time()+60*60*24*COOKIE_TIME_OUT, "/"); 
        setcookie("user_key", sha1($ckey), time()+60*60*24*COOKIE_TIME_OUT, "/"); 
        setcookie("user_name",$_SESSION['user_name'], time()+60*60*24*COOKIE_TIME_OUT, "/"); 
        } 
     if(empty($err)){    
      header("Location: myaccount.php"); 
     } 
     } 
     else 
     { 
     //$msg = urlencode("Invalid Login. Please try again with correct user email and password. "); 
     $err[] = "Invalid Login. Please try again with correct user email and password."; 
     //header("Location: login.php?msg=$msg"); 
     } 
    } else { 
     $err[] = "Error - Invalid login. No such user exists"; 
     }  
} 

पुनर्निर्देशन कोड:

//connect database 
    require_once 'dbc.php'; 

    page_protect(); 

    $authorID = $_SESSION['user_id']; 
    if (!empty($_POST["answ_content"]) && $authorID != 0) { 
      //vaqciot html chveulebriv texad 
      $content = htmlentities($_POST["answ_content"],ENT_COMPAT,'UTF-8'); 
      $dro = date('Y-m-d H:i:s'); 
      $qID = $_POST["question_ID"]; 
      $author = $_SESSION["user_name"]; 


      $sql="INSERT INTO wp_comments (comment_ID, comment_post_ID, comment_author, comment_author_IP, comment_date, comment_content, user_id) 
       VALUES 
       (NULL, '$qID', '$author', '123.123.123.123', '$dro', '$content', '$authorID')"; 

      $result = mysql_query($sql); 

      //pasuxebis raodenobis ertit gazrda 
      $increase = "UPDATE wp_posts SET comment_count = comment_count+1 WHERE ID = $qID"; 
      mysql_query($increase); 

      //gadamisamarteba shekitxvis gverdze 
      $url = 'Location:http://example.com/site/answ/question.php?ID=' .$qID; 
      header($url); 
    } else { 
     echo 'error'; 
    } 
+0

का उपयोग किया जा सकता है कृपया कुछ कोड और कुछ उदाहरण पते दिखाएं जिन्हें आप रीडायरेक्ट कर रहे हैं। –

+2

क्या आप हमें कुछ कोड दिखा सकते हैं? उपयोगकर्ता पीसी पर कुकीज़ सक्षम हैं? क्या आप अपने सत्रों के लिए कुकीज़ का उपयोग करते हैं या आप हमेशा सत्र-आईडी को गेट-पैरामीटर के रूप में भेजते हैं और आपके रीडायरेक्ट पर भूल जाते हैं? – oezi

+0

सभी आवश्यक कोड जोड़ा गया ... –

उत्तर

11

आप अन्यथा आप बस सामग्री के दो पृष्ठों भरी हुई है, अपने हैडर पुनर्निर्देशन के बाद exit(); लगाने की जरूरत है 1 पेज में

यह भी सुनिश्चित करें कि आपके पास अपनी सभी स्क्रिप्ट के शीर्ष पर session_start(); है।

+0

मैंने बाहर निकलें(); लेकिन यह काम नहीं किया! दुर्भाग्यवश मुझे साइट संरचना की वजह से पुनर्निर्देशन का उपयोग करना होगा ... –

+4

आपने उत्तर को स्वीकार किए जाने के रूप में क्यों चिह्नित किया ...? हालांकि मेरा ठीक नहीं हुआ! – Eliethesaiyan

+1

वे यहाँ कुंजी session_start() है; अपने सभी पृष्ठों के शीर्ष पर – Lizard

4

आप सत्र शुरू नहीं कर रहे हैं। आदेश सत्र चर का उपयोग और पृष्ठों में ले जाने के लिए उन्हें करने के लिए, आप कुछ और करने से पहले प्रत्येक पेज के शीर्ष पर

session_start(); 

डाल करने के लिए की जरूरत है।

1

सरल! सुनिश्चित करें कि आप जिस पृष्ठ से आ रहे हैं (उदा। www.example.com) शुरुआत में www (उदा। www.example.com/redirect.php) नोटिस www पर रीडायरेक्ट करता है। यदि आप इसे पृष्ठ से पृष्ठ में बदलते हैं, तो हाँ चीजें गड़बड़ हो जाती हैं।

+0

वही समस्या, शीर्षलेख रीडायरेक्ट पेज से पृष्ठ पर बदल रहे थे और मैंने इसे पूरे प्रोजेक्ट और वॉयला में उपयोग की जाने वाली सामान्य योजना में बदल दिया, यह काम किया .. कम से कम एक सप्ताह तक इस पर मेरा गधा खराब कर दिया। .. धन्यवाद आदमी, आप एक उद्धारक हैं ... – coder101

0

ये सत्र हमेशा काम नहीं करते हैं क्योंकि हम कभी-कभी उम्मीद करते हैं। मुझे खोने वाले सत्रों का उपयोग करके मेरी वेबसाइट के साथ एक ही समस्या थी। मैंने मूल रूप से उस मूल्य को इंजेक्शन करके हल किया जिसे मैं छिपे हुए टेक्स्ट फ़ील्ड में सत्र में पहली बार लोड करना चाहता हूं। फिर दूसरी बार जब मैं पेज (पेज सबमिट) कहता हूं तो मैंने बस छिपे हुए टेक्स्ट फ़ील्ड से मूल्य पढ़ा और मेरे बाकी कोड को जारी रखा।

इस मामले में सत्रों का उपयोग करने से कहीं अधिक आसान और क्लीनर है!)

session_id('own_generated_session_id_string'); 

लेकिन जैसे documentation कहते हैं, आप session_start के बाद उपयोग करने से पहले

session_start(); 

इस का उपयोग करने के लिए है (,:

+3

यह भी बहुत असुरक्षित है। कुछ सत्र डेटा केवल सर्वर के लिए प्रासंगिक हैं और क्लाइंट के संपर्क में नहीं आना चाहिए। – konqi

+1

जोसो के साथ सहमत, सत्र एक व्यूस्टेट की तुलना में क्लीनर हैं और सत्र डेटा को व्यूस्टेट डेटा नहीं माना जाता है ... –

+0

छिपे हुए टेक्स्टफील्ड द्वारा आपका क्या मतलब है ...? Textfied जिसे आपके एचटीएमएल स्रोत कोड को देखकर चेक नहीं किया जा सकता है? – Eliethesaiyan

2

मैं का उपयोग कर मेरा अपना सत्र id स्थापित करने के लिए कोशिश कर रहा था सत्र पैरामीटर को साफ़ करता है।

0

बाहर निकलें; हेडर रीडायरेक्शन या session_regenerate_id (सत्य) के बाद रखा जाना चाहिए;

संबंधित मुद्दे

 संबंधित मुद्दे