2010-06-11 75 views
8

Khi tôi sử dụng chuyển hướng tiêu đề php tất cả các biến phiên bị mất ... Một số người nói rằng thêm lối ra(); ngay sau tiêu đề (""); sẽ giải quyết vấn đề nhưng nó dường như không phải là giải pháp ...Phiên bị mất sau khi chuyển hướng trang trong php

Bất cứ ai có thể vui lòng giúp đỡ?

Sau đây là cách tôi lưu trữ biến thành phiên:

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"; 
     }  
} 

đang Redirection:

//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

Vui lòng hiển thị một số mã và một số địa chỉ mẫu mà bạn đang chuyển hướng đến. –

+2

bạn có thể cho chúng tôi thấy một số mã không? cookie được bật trên máy tính của người dùng? bạn có sử dụng cookie cho các phiên của bạn hay bạn luôn gửi id phiên làm tham số get và quên rằng tại chuyển hướng của bạn? – oezi

+0

Nhập tất cả các mã cần thiết ... –

Trả lời

11

Bạn cần phải đặt exit(); sau khi chuyển hướng tiêu đề của bạn, nếu không bạn vừa nạp hai trang nội dung thành 1 trang.

Cũng đảm bảo bạn có session_start(); ở đầu tất cả các tập lệnh của mình.

+0

Tôi đã thêm exit(); nhưng nó không hoạt động! Thật không may tôi phải sử dụng chuyển hướng vì cấu trúc trang web ... –

+4

tại sao bạn đánh dấu câu trả lời là được chấp nhận ...? Didnt fix my mine! – Eliethesaiyan

+1

Chìa khóa ở đây là session_start(); ở trên cùng của tất cả các trang của bạn – Lizard

4

Bạn hiện không bắt đầu phiên. Để sử dụng các biến phiên và yêu cầu chúng thực hiện trên các trang, bạn cần phải đặt

ở đầu mỗi trang trước bất kỳ điều gì khác.

1

Mẫu! đảm bảo trang bạn đến từ (ví dụ: www.example.com) chuyển hướng đến (ví dụ: www.example.com/redirect.php) thông báo www ngay từ đầu. Nếu bạn thay đổi từ trang này sang trang khác, thì mọi thứ sẽ trở nên vô cùng.

+0

Cùng một vấn đề, chuyển hướng tiêu đề đã thay đổi từ trang này sang trang khác và tôi chuyển nó sang lược đồ chung được sử dụng trên toàn bộ dự án và thì đấy, nó hoạt động .. vặn mông của tôi trong ít nhất một tuần. .. cảm ơn người đàn ông, bạn là một vị cứu tinh ... – coder101

0

Các phiên này không phải lúc nào cũng hoạt động như chúng tôi mong đợi. Tôi đã gặp sự cố tương tự với trang web của mình bằng các phiên bị mất. Về cơ bản, tôi đã giải quyết nó bằng cách tiêm giá trị mà tôi muốn giữ cho phiên vào trường văn bản ẩn lần đầu tiên trang tải. Sau đó, lần thứ hai tôi gọi trang (gửi trang) Tôi chỉ cần đọc giá trị từ trường văn bản ẩn và tiếp tục với phần còn lại của mã của tôi.

Điều đó dễ dàng hơn và sạch hơn so với việc sử dụng các phiên trong trường hợp này!

+3

Nó cũng rất không an toàn. Một số dữ liệu phiên chỉ liên quan đến máy chủ và không được tiếp xúc với khách hàng. – konqi

+1

Đồng ý với JoSo, Phiên làm sạch hơn dữ liệu xem và dữ liệu phiên không được coi là dữ liệu quan sát ... –

+0

ý bạn là gì bằng văn bản ẩn ...? Textfied không thể kiểm tra bằng cách xem mã nguồn html của bạn? – Eliethesaiyan

2

Tôi đã cố gắng để thiết lập các phiên id của riêng tôi sử dụng:

session_id('own_generated_session_id_string'); 

Nhưng khi documentation nói, bạn phải sử dụng này trước khi

session_start(); 

Sử dụng nó sau khi session_start(), xóa các tham số phiên.

0

thoát; nên được đặt sau khi chuyển hướng tiêu đề hoặc session_regenerate_id (true); có thể được sử dụng

Các vấn đề liên quan