作者共发了6篇帖子。 内容转换:不转换▼
 
点击 回复
268 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)
 

本帖信息

点击数:268 回复数:5
评论数: ?
作者:巨大八爪鱼
最后回复:巨大八爪鱼
最后回复时间:2015-7-4 17:29
 
©2010-2024 Arslanbar Ver2.0
除非另有声明,本站采用知识共享署名-相同方式共享 3.0 Unported许可协议进行许可。