【发布时间】:2021-06-30 01:00:18
【问题描述】:
我正在开发一个基于 PHP 角色的应用程序,我还必须在其中维护会话。一旦用户登录,他将被重定向到我管理会话的界面,因为用户 ID 和密码将与角色匹配。如果不匹配,他将被重定向到如下登录。
if (!isset($_SESSION['user_login']))
{
header("Location:index.php");
}
else
{
if((time()-$_SESSION['expire']) > 365*24*60*60)
{
session_destroy();
}
else{
//user would stay logged in
}
}
这也与数据表交互,其中每当会话超时时,它都会为表抛出错误:
datatables 警告表 id= - 为第 0 行第 0 列 tn/4 请求未知参数“0”
我认为如果我增加会话超时,这不会是一个负担。我尝试了所有可能的方式,但都以失败告终。
- 增加 php.ini session.gc_maxlifetime
- 按页面覆盖 php.ini 为 ini_set('session.gc_maxlifetime', 31536000)
- 编辑 MultiPHP INI 编辑器
除了本地的,似乎没有什么可以工作。请指教。
更新(会话和 cookie 如何从登录中构建):
if(!empty($_POST["remember_me"]))
{
setcookie ("user", $_POST["userid"], (time() + (10 * 365 * 24 * 60 * 60)));
setcookie ("pass", $_POST["password"], (time() + (10 * 365 * 24 * 60 * 60)));
}
else
{
if(isset($_COOKIE["userid"]))
{
setcookie ("userid", "");
}
if(isset($_COOKIE["password"]))
{
setcookie ("password", "");
}
if (!session_id()) session_start();
$_SESSION['user_login'] = $userid;
$_SESSION['expire'] = time();
header('Location: user_interface.php');
【问题讨论】:
-
您是否将 PHP 会话与 Cookie 会话混合使用? PHP 会话的生命周期应该很短。
-
如果你想让你的会话过期,你不必自己维护那个时间。 stackoverflow.com/questions/520237/… 详细介绍了如何正确操作。
-
@MarkusZeller 我认为是的。请检查更新。
-
我不确定设置 cookie 是否正常工作,然后在相同的标头范围内进行重定向。所以我猜,cookie 永远不会被设置。
-
我猜另一件事是使用 PHP superglobal
$_SESSION完全错误。您应该改为$_COOKIE。