2012-01-11 116 views
1

在我工作的網站上,您必須登錄兩次才能註冊會話變量。我讀過它是在您執行標題重定向時引起的。由於重定向,php登錄代碼需要登錄兩次

function login() 
{ 
    // secure data 
    $email  = mysql_real_escape_string(htmlentities($_POST['email'])); 
    $password = md5(mysql_real_escape_string(htmlentities($_POST['password']))); 
    // sql statment 
    $tbl=$this->tbl; 
    $sql="SELECT id, admin, email FROM $tbl WHERE email='$email' AND password='$password'"; 
    $result=$this->query($sql, true); 
    // check if user exist 
    $numRow=mysql_num_rows($result); 
    if($numRow==1) 
    { 
     // login 
     while($row = mysql_fetch_array($result)) 
     { 
      $_SESSION['id']=$row['id']; 
      $_SESSION['admin']=$row['admin']; 
     } 
     // problematic redirect. http redirect erases session data? 
     header('Location: http://www.website.com/'); 
     return true; 
    } 
    $this->error="logint"; 
    return false; 
} 
+0

where session_start()? – j08691 2012-01-11 18:28:52

+0

在包含我的類文件並運行登錄方法之前,會話啓動位於我的文件中,或者是否還需要將其包含在我的類文件中。 – Yamiko 2012-01-11 18:34:33

回答

2

ALWAYS session_start()設置或獲取的任何會話變量

+0

在包含類並運行該方法之前,我在文件中使用會話開始。我是否也需要將它放在類文件中? – Yamiko 2012-01-11 18:35:15

+0

你需要它的功能 – 2012-01-11 18:53:17

0

一個解決方案之前,是一些JavaScript發送到所有的客戶端!

我測試你的dns條目www.yamikowebs.com。一定還要解決你的客戶端上的IP測試!

0

我想重定向是在另一個域。

約束是將數據保留到另一個域。

一個優雅的解決方案是在您的數據庫中存儲信息,創建一個唯一的票據,只是爲了傳輸字符串,並使用函數md5()。例如使用一個日期包含在一個長串中的中間位置。在數據庫中將其延遲1分鐘以保證安全。

包括此更換頭

$tt= new DateTime(); 
$tt->format('Y-m-d/H:i:s'); 
$astring = "On a website I am working on you have to login in twice for the session variables to register. from the suggested questions I have read it is caused when you do a header redirect. possible php solutions(if none I can echo a javascript redirect"; 
$arandom = rand(0, (strlen($astring) - 19)); 
$astring = substr_replace($astring,$tt->format('Y-m-d/H:i:s'),$arandom,19); 
$code = md5($astring).crc32($astring); 

// use $code to remember all information of your client in the database et reuse on demand of script associated with client0002 
echo "<script language=\"javascript\"> 
    window.location.assign('http://www.yamikowebs.com/test/client0002?acces=$code')</script>"; 

有愉快的一天。