1.php.ini設定
session.cookie_domain = .mydomain.com
2‧ini_set(“session.cookie_domain”, “.mydomain.com.tw”); (記得放在session_start()前)
3‧session_set_cookie_params(0,’/’,’.mydomain.com.tw’,0);(記得放在session_start()前)
大型網站架構..net 架構師.rabbitMQ.redis.行動開發.APP開發教學.PHP Laravel開發..net core C# 開發.架構師之路.Delphi開發.資料庫程式.進銷存.餐飲POS系統
1.php.ini設定
session.cookie_domain = .mydomain.com
2‧ini_set(“session.cookie_domain”, “.mydomain.com.tw”); (記得放在session_start()前)
3‧session_set_cookie_params(0,’/’,’.mydomain.com.tw’,0);(記得放在session_start()前)
ini_set('session.cookie_lifetime', 0);
來源 Cross-Browser Session Starter
[php]
<?php// $expire = the time in seconds until a session have to expire
function start_session($expire = 0) {
if ($expire == 0) {
$expire = ini_get("session.gc_maxlifetime");
} else {
ini_set("session.gc_maxlifetime", $expire);
}
if (empty($_COOKIE['PHPSESSID'])) {
session_set_cookie_params($expire);
session_start();
} else {
session_start();
setcookie("PHPSESSID", session_id(), time() + $expire);
}
}
// this example will start a session with an expire time given by the php configuration
start_session();
// start_session(600) will start a session which will expire after 10 minutes (60*10 seconds)
?>
[/php]
網站為了擔心Cross-site Request Forgery(CSRF/XSRF)攻擊,所以在增加csrf-token的session,在執行時判斷網頁的csrf-token值跟session是不是一樣。
不過發現即使設定gc_maxlifetime,仍會有可能出現應該過期的session還在的問題,這才發現原來php沒有一個daemon定時掃描過期的session,而是透過session.gc_probability/session.gc_divisor的設定來決定是否啟動Garbage Collector機制的機率。
解決的方式有幾種:
1.提高session.gc_probability/session.gc_divisor的機率,不過會造成系統的性能降低。
2.如果有更動gc_maxlifetime的話,也要跟著更動session.save_path,或者使用session_save_path()
自己使用了另一個方式,增加了csrf-time,自己檢查過期的話就unset Session。