【发布时间】:2018-01-30 09:54:25
【问题描述】:
这是我第一次在 PHP 上使用会话。 从 StackOverflow 和其他网站获取一些信息以构建我的第一个 PHP 登录,但我遇到了问题,不知道如何解决。
基本上在我设置会话的那一刻,页面刷新后,这个会话就消失了。不应该停留一段时间吗? (可以用set_cookie_params等设置,但这是另一个话题)
我在页面的开头(全局)有这段代码:
ini_set('session.cookie_httponly', 1);
ini_set('session.entropy_file', '/dev/urandom');
ini_set('session.hash_function', 'whirlpool');
ini_set('session.use_only_cookies', 1);
ini_set('session.cookie_secure', 1);
session_name("RANDOMID");
session_start();
if (isset($_SESSION['uid']))
{
if ($_SESSION['ipremote'] !== getUserIP() && $_SESSION['useragent'] !== getUserAgent())
{
session_unset();
session_destroy();
session_regenerate_id(true);
}
}
else
{
session_regenerate_id(true);
$_SESSION['ipremote'] = getUserIP();
$_SESSION['useragent'] = getUserAgent();
}
然后在我的 login.php 文件中,当用户插入正确的信息时:
$_SESSION['uid'] = 3;
header("Location: index.php");
exit;
重定向后uid会话消失的问题:我在index.php页面的末尾放了var_dump变量var_dump,我只看到IP和每次在else 条件下设置的用户代理。
编辑:我试图用 session_start(); 替换会话初始化的所有内容并且它有效,我不明白为什么这个安全会话初始化它不起作用并且使会话消失。
【问题讨论】:
-
在
index.php上也需要session_start();,以防您想访问 SESSION 变量和值 -
已经设置好了,因为代码的第一部分一开始是全局的(login.php和index.php两个文件都需要)。
-
session_name("RANDOMID")– 字面意思是“RANDOMID”,还是意味着您每次都在这里随机生成一个新的 id……? -
这只是一个随机名称,所以它实际上是 RANDOMID(没有定义或变量)
-
您在刚刚销毁会话时使用
session_regenerate_id(true)。