作者共發了6篇帖子。 內容轉換:不轉換▼
 
點擊 回復
392 5
【資料】PHP Session實時設置有效期為1年
一派護法 十九級
1樓 發表于:2015-7-4 17:17
<?php
// URL: http://pc3.purasbar.com/temp/11504/2.php
//session_start();
//var_dump(session_get_cookie_params());
/* Keep the session file on the server side (For all session variables) */
$previous = session_cache_expire();
session_cache_expire(86400 * 365);
$now = session_cache_expire();
/* All session variables stored on the server side will expire in 365 days */
session_start();
/* Keep the cookie on the client side */
setcookie(session_name(), session_id(), time() + 86400); // keep 1 day
// Note: Do not use session_set_cookie_params(500), which should be put before session_start()
//setcookie(session_name(), session_id(), 0); // default setting: it will expire when the browser closes (0 can be omitted)
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Session Expire</title>
</head>
<body>
Session ID: <?=session_id()?><br>
<?php
if (isset($_SESSION["name"])) {
    echo $_SESSION["name"] . ": " . $_SESSION["counter"];
    $_SESSION["counter"]++;
} else {
    echo "Lost";
    $_SESSION["name"] = "Counter";
    $_SESSION["counter"] = 1;
}
echo "<br><br>\n<b>On the server side:</b><br>\n";
echo "Previous: $previous<br>\nNow: $now";
?>
</body>
</html>
一派護法 十九級
2樓 發表于:2015-7-4 17:18
將服務器關機,等幾十分鐘后再開機,Session數據仍然存在。
Session ID: 3l4hm7ojp211tqd3qqgeac6n06
Counter: 270

On the server side:
Previous: 180
Now: 31536000
一派護法 十九級
3樓 發表于:2015-7-4 17:23

核心代碼:
<?php
session_cache_expire(86400 * 365); // 設置服務器上的所有的Session變量都保存365天,該語句必須放在會話開始前。
session_start();


setcookie(session_name(), session_id(), time() + 86400 * 365); // 設置瀏覽器端保存Session ID的cookie的有效期為365天(1樓的代碼裡面忘了寫*365)
//setcookie(session_name(), session_id(), 0); // 這個就是默認的設置:關閉瀏覽器后所有Session失效


$_SESSION["name"] = "Counter";
?>

一派護法 十九級
4樓 發表于:2015-7-4 17:26
根據是否記住密碼來設置Session有效期:
if ($rememberPassword) {
  setcookie(session_name(), session_id(), time() + 86400 * 365);
} else {
  setcookie(session_name(), session_id(), 0);
}

注意session_cache_expire(86400 * 365); 這個根據$rememberPassword變動。裡面的數值只要比最大的那個大就行了。
一派護法 十九級
5樓 發表于:2015-7-4 17:27

對於Cookies來說,每個Cookie的生命期可以是不一樣的。

而對於Session來說,同一個會話的所有Session變量的生命期都相同。

一派護法 十九級
6樓 發表于:2015-7-4 17:29
PHP中的session_set_cookie_params函數也可以設置保存Session ID的Cookie的有效期,但是必須放在session_start();前面。由於這裡要實時設定(也就是根據是否勾選了“記住登錄狀態”的複選框來設定),所以不能用這個。

回復帖子

內容:
用戶名: 您目前是匿名發表
驗證碼:
(快捷鍵:Ctrl+Enter)
 

本帖信息

點擊數:392 回複數:5
評論數: ?
作者:巨大八爪鱼
最後回復:巨大八爪鱼
最後回復時間:2015-7-4 17:29
 
©2010-2024 Arslanbar Ver2.0
除非另有聲明,本站採用創用CC姓名標示-相同方式分享 3.0 Unported許可協議進行許可。