为什么在重新加载页面$_SESSION
变量重新设置?!
if (isset($_SESSION['LAST_ACTIVITY']) && ((time() - $_SESSION['LAST_ACTIVITY']) > 1800))
{
// last request was more than 30 minutes ago
session_unset();
session_destroy();
}
$_SESSION['LAST_ACTIVITY'] = time();
if (!isset($_SESSION['CREATED'])) {
$_SESSION['CREATED'] = time();
} else if (time() - $_SESSION['CREATED'] > 1800) {
// session started more than 30 minutes ago
session_regenerate_id(true); // change session ID for the current session and invalidate old session ID
$_SESSION['CREATED'] = time(); // update creation time
}
我的代码错了吗?
php.ini
session.cache_expire = 180
session.use_cookies = 0
session.use_only_cookies = 0
session.auto_start = 0
session.gc_maxlifetime = 1440
session.cache_expire = 180
我有session_start()
在页面顶部var_dump($_SESSION)
页面显示不同的$_SESSION
值!!
array (size=2)
'LAST_ACTIVITY' => int 1472457503
'CREATED' => int 1472457503
再次刷新!
array (size=2)
'LAST_ACTIVITY' => int 1472459001
'CREATED' => int 1472459001
变化
时LAST_ACTIVITY
正常但是为什么'CREATED'
被改变了!!?
我的问题是session.use_cookies = 0
,即会话被禁用使用cookie。
因为session使用cookie来保存SID。
所以如果cookies
被禁用,session.use_trans_sid
是0
在php.ini与页面重载session_start()
生成新的会话
cookie可能会在服务器端禁用session.use_cookies = 0
或用户浏览器设置。
那么如何使用会话没有cookie ?!
会话将在cookies被禁用时工作。但首先apache检查php配置设置。如:
--enable-trans-sid
and
--enable-track-vars
如果这些值设置为true,会话将自动通过POST传递。
如果"——enable-trans-sid"one_answers"——enable-track-vars"的值被设置为FALSE,我们需要通过使用SID常量传递会话id。
< a href="index.php?<?= SID ?>" >Navigate from here< /a >
需要设置php.ini
ini_set("session.use_cookies", 0);
ini_set("session.use_trans_sid", 1);
注意:php默认禁用 trans支持。使用transsid可能会危及用户的安全。使用此选项谨慎。用户可以通过电子邮件/irc/etc发送包含活动会话ID的URL给其他人用户可以访问您的网站使用相同的会话ID,始终使用存储在浏览器中的URL历史记录或书签。
更详细:session.use_trans_sid