php - PHP 中的 $_SESSION:页面重新加载时未读取变量
问题描述
当我设置会话变量时,我认为它没有被读取:
<?php
if(isset($_SESSION['last_activity'])){
if( $_SESSION['last_activity'] < time()-$_SESSION['expire_time'] ) {
//...
}else{
session_destroy();
session_start();
$_SESSION['last_activity'] = time(); // setting variable
$_SESSION['expire_time'] = 8*60*60; // calculate exp.time
echo "branch 1";
}
}else{
session_start();
$_SESSION['last_activity'] = time(); // setting variable
$_SESSION['expire_time'] = 8*60*60; // calculate exp.time
echo "branch 2";
}
?>
在页面重新加载时,它始终被认为是“分支 2”。如果我放 'session_start();' 在页面顶部,每次重新加载它都会从分支 1.1 跳转到 1.2:
解决方案
您需要在第一个 if 条件之前启动会话。因为您在检查SESSION
是否存在之前不启动会话
session_start();
if(isset($_SESSION['last_activity'])){
if( $_SESSION['last_activity'] < time()-$_SESSION['expire_time'] ) {
//...
}else{
$_SESSION['last_activity'] = time();
$_SESSION['expire_time'] = 8*60*60;
echo "branch 1";
session_destroy();
}
}else{
$_SESSION['last_activity'] = time(); // setting variable
$_SESSION['expire_time'] = 8*60*60;
echo "branch 2";
session_destroy();
}
更新:
它足以在 if 条件之前启动会话,并且当条件进入 else 时,只需销毁它
推荐阅读
- java - 关于制作离线词典
- haskell - 返回类型丢失 IO
- java - Jigsaw:将 JRE 与自动模块捆绑在一起
- reactjs - 使用自定义扩展加载资产不起作用
- c++ - QNetworkaccessmanager 对象连接函数不调用
- asp.net - 如何在单个 Web api ASP.NET Core 中发布 json 和文件对象
- javascript - 在返回结果之前等待ajax完成(通用功能)
- excel - 仅将 VBA 粘贴到可见单元中优化
- openssl - 如何为mingw编译器编译fips?
- java - 在黄瓜框架的报告中生成 json 后在哪里调用 jar 文件(ATM)?