2012-06-08 96 views
1

我今天正在建設我的網站,我意識到每次我去測試它,我必須保持登錄到我的網站我的帳戶,這將是正常的,除非我設置Cookie過期在30天內,出於某種原因,我認爲他們沒有正確地做好自己的工作,但不幸的是,我並沒有很多關於解決問題的知識,下面是在登錄時設置cookie的代碼,如果您需要更多信息,請告訴我。不保存帳戶登錄的Cookie

$encryptedID = base64_encode("g4enm2c0c4y3dn3727553$id"); 
setcookie("idCookie", $encryptedID, time()+60*60*24*100, "/"); // Cookie set to expire in about 30 days 
setcookie("passCookie", $pass, time()+60*60*24*100, "/"); // Cookie set to expire in about 30 days 

一些更多的代碼,它上面的(可以幫助)

if($login_check > 0){ 
    while($row = mysql_fetch_array($sql)){ 
     // Pleae note: Adam removed all of the session_register() functions cuz they were deprecated and 
     // he made the scripts to where they operate universally the same on all modern PHP versions(PHP 4.0 thru 5.3+) 
     // Create session var for their raw id 
     $user_id = $row["user_id"]; 
     $_SESSION['user_id'] = $user_id; 
     // Create the idx session var 
     $_SESSION['idx'] = base64_encode("g4p3h9xfn8sq03hs2234$id"); 
     // Create session var for their username 
     $login_username = $row["login_username"]; 
     $_SESSION['login_username'] = $login_username; 
     // Create session var for their password 
     $login_userpass = $row["login_password"]; 
     $_SESSION['login_userpass'] = $login_userpass; 
     $sql_login = mysql_query("SELECT no_of_logins FROM users WHERE user_id='$user_id'"); 
     $array = mysql_fetch_assoc($sql_login); 
     $no_of_logins = $array['no_of_logins']; 
     //$sql_login_check = mysql_num_rows($sql_login); 
     if($no_of_logins == "0"){ 
      mysql_query("UPDATE users SET first_login=now() WHERE user_id='$user_id' LIMIT 1"); 
     } 
     mysql_query("UPDATE users SET last_login=now() WHERE user_id='$user_id' LIMIT 1"); 
     mysql_query("UPDATE users SET online = '1' WHERE user_id='$user_id' LIMIT 1"); 
     mysql_query("UPDATE users SET no_of_logins = no_of_logins + 1 WHERE user_id='$user_id' LIMIT 1"); 
     mysql_query("UPDATE system SET total_logins = total_logins + 1"); 
     mysql_query("UPDATE system SET no_online = no_online + 1"); 
    } // close while 
    // Remember Me Section 
    $encryptedID = base64_encode("g4enm2c0c4y3dn3727553$id"); 
    setcookie("idCookie", $encryptedID, time()+60*60*24*100, "/"); // Cookie set to expire in about 30 days 
    setcookie("passCookie", $pass, time()+60*60*24*100, "/"); // Cookie set to expire in about 30 days 
    // All good they are logged in, send them to homepage then exit script 
    header("Location: profile.php"); 
    exit(); 
} else { // Run this code if login_check is equal to 0 meaning they do not exist 
    $loginErrorMsg = "Incorrect login data, please try again"; 
    $errorDisplay = ''; 
} 

感謝您的任何和所有幫助

+1

請正確縮進您的代碼,您的for循環在哪裏開始?未格式化的代碼使你看起來很粗心 –

回答

2

我沒有看到你的代碼太多的錯誤,除了:

time() + 60*60*24*100 

這100個天未來,而不是30天:)

更新

這是正常的因爲會話cookie在關閉瀏覽器時過期,因爲它們沒有在響應頭文件中設置明確的終止日期。

這正是您創造持久餅乾的原因;當會話過期(或不存在更可能)時,必須使用從這些cookie收集的數據填充新會話。

+0

我的意思是我必須保持登錄狀態,每當我關閉瀏覽器並重新打開它時 – Arken

+0

@Arken正確,我更新了我的答案以提及會話 - 當您關閉瀏覽器時可能會過期。 ..所以你必須使用餅乾重新填充它 –

+0

好的謝謝你的幫助 – Arken

0

如果我沒有記錯,會話仍然會超時(釋放有限的服務器資源......這是一件好事),即使您的cookie仍然存在於瀏覽器中,但配置的會話超時時間已過。

PHP Session timeout

你出來後看到一個會議的時間,比如20分鐘不活動(而不是30天,你希望的),或者它立即如果您登錄,請關閉瀏覽器超時,打開瀏覽器,並嘗試再次訪問該網站?

+0

它不會立即超時5-10分鐘 – Arken

+0

嘗試明確設置會話超時,然後,如鏈接所示,例如30分鐘。 –

1

會話到期和cookie到期是不同的事情。您不應將PHP會話設置爲30天,默認值爲1小時(也許30分鐘)。你需要的是一種將用戶登錄到網站並擁有特殊cookie的自動登錄(重啓PHP會話)的方式。