我想在管理员登录面板中更改会话名称和会话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");
?>
Run Code Online (Sandbox Code Playgroud)
.................................................. .........................................
home.php
<?php
session_start();
if(!isset($_SESSION['admin']))
echo "you are logout";
else
echo "you are in home";
?>
Run Code Online (Sandbox Code Playgroud)
网站打印'你要注销'
简短的回答是插入行:session_name("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.