为什么重新加载页面$_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'
被改变了!! ??
答案 0 :(得分:0)
我的问题是session.use_cookies = 0
,即会话被禁用以使用cookie
因为会话使用cookie来保存SID。
所以如果cookies
已禁用且session.use_trans_sid
为0
,则php.ini中的页面重新加载session_start()
会生成新会话。
使用session.use_cookies = 0
或使用用户浏览器设置,Cookie可能会从服务器端禁用。
然后如何使用没有Cookie的会话?!
禁用cookie时,会话将起作用。但首先apache检查php配置设置。像:
--enable-trans-sid
and
--enable-track-vars
如果这些值设置为true,则会话将自动通过POST传递。
如果“--enable-trans-sid”和“--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 sid支持。使用trans sid可能会给您的用户带来安全风险。使用此选项 警告 。用户可以通过email / irc / etc将包含活动会话ID的URL发送给其他人包含活动会话ID的URL可能是 存储在公共可访问的计算机中用户可以访问您的站点 使用相同的会话ID始终使用存储在浏览器中的URL 历史或书签 更多detial:session.use_trans_sid