我想更改会话名称&我的管理员登录面板中的会话ID。 在我的管理面板中,Cookie设置为仅限http
我的问题是会话没有设置。我的代码有任何问题 请帮忙
代码是 的index.php
<?php
session_name("websitename");//session name changed
if (session_start()) {
session_regenerate_id(true);//session id changed
//$sess_name=session_name();
setcookie("websitename", session_id(), null, '/', null, null, true);//set cookie httponly
}
$_SESSION['admin']="login";
header("Location: home.php");
?>
............................................... ............................................
home.php
<?php
session_start();
if(!isset($_SESSION['admin']))
echo "you are logout";
else
echo "you are in home";
?>
网站打印'您要退出'
答案 0 :(得分:5)
简短的回答是插入一行: 会话名称( “websitename”); 作为home.php的第一行
为什么呢?对于那些发现自己试图理解PHP中session_name和session_id之间区别的人,我提供了这样的解释:
您的会话数据位于PHP服务器上我称之为“数据存储区”的位置。通常它是一个磁盘文件,但它也可以是一个数据库,具体取决于PHP和应用程序在您的特定服务器上的实现方式(PHP允许应用程序覆盖本机提供的会话存储。
您的会话数据采用“不规则阵列”的形式。
使用每个会话唯一的密钥将不规则数组存储在数据存储区中。
要将会话数据从数据存储区获取到您的php脚本,您必须拥有所需会话的正确密钥。
上面示例代码中index.php中发生的事情是:
当你检查时,你在home.php中的代码我相信这就是发生的事情:
你的代码比这更复杂,因为index.php中的“if”是为了简化问题:
您使用密钥“B2”将管理员值存储在会话数据存储中,然后使用密钥“C3”在home.php中查找它,但找不到它。这是因为您在index.php中使用会话名称“websitename”,但您在home.php中使用的会话名称为“PHPSESSIONID”。如果您使用chrome开发人员工具的资源选项卡查看cookie,您将看到“websitename”和“PHPSESSIONID”的cookie。在开发人员工具中,cookie将显示真实的,随机的会话ID(26个字符),而不是我为此讨论所做的两个字符会话ID。