如何解决session_name和session_start无法正常工作
我的页面上出现此错误
#1
PHP Warning: session_name(): Cannot change session name when session is active in /dir/login.php on line xx
PHP Notice: session_start(): A session had already been started - ignoring in /dir/login.php on line xx
#2
PHP Warning: session_name(): Cannot change session name when session is active in /dir/other_pages.php on line xx
和页面上的代码类似,以检查 SessionData
<?php
//set session name for each pages and start the session
session_name('AppName');
session_start();
...
// check if session is exist,if it exist then set the data,if its not then redirect to login pages
if(!isset($_SESSION['SessionData'])){
//return to login page if session doesnt exist
header("location:/login");
exit();
}else{
// get and set data from $_SESSION['SessionData'];
$Data = $_SESSION['SessionData'];
}
?>
在登录页面(#1)上,它可以设置会话名称并获取数据,但是当我转到其他页面(#2)时,没有来自$_SESSION['SessionData']
的会话数据。
会话名称应为“ AppName” 时,它将变为“ PHPSESSID” 。并且即使登录成功,它仍会重定向到登录页面
代码有什么问题吗?还是php版本?因为IAM使用PHP 7.3 还是来自网络服务器的问题?
**#编辑:** 我试图使用此代码在/filename.php上创建一个新文件
session_name('SessionExample');
session_start();
$_SESSION['example'] = "hello";
echo $_SESSION['example'];
它可以回显“你好”
然后我用
创建另一个文件/subdir/filename2.php
session_name('SessionExample');
session_start();
print_r($_SESSION);
echo $_SESSION['example'];
但不幸的是,它没有回显任何内容,并且仅显示null / empty数组
会话名称也为PHPSESSID
而不是SessionExample
解决方法
检查是否已经启动了错误的会话。如果是这样,请销毁该会话并开始所需的会话。
if (session_status() == PHP_SESSION_ACTIVE && session_name() != 'AppName') {
session_destroy();
}
session_name('AppName');
session_start();
,
我认为您无法打开两个会话,因此错误“一个会话已经开始”是因为您尝试打开另一个会话,整个页面只有一个会话,但是您可以使用不同的会话变量。
if(session_status() == PHP_SESSION_NONE)
{
session_name('AppName');
session_start();
}
尝试执行此操作。 PHP_SESSION_NONE检查会话是否已经开始
我在这段代码中看到的另一件事是您没有设置会话
if(!isset($_SESSION['SessionData']))
{
//return to login page if session doesnt exist
header("location:/login");
exit();
}
因此,您需要为变量设置某种方式,否则由于会话变量不存在,程序将一直继续登录。
if(!isset($_SESSION['SessionData'])){
//return to login page if session doesnt exist
$_SESSION['SessionData'] = 'Data';
header("location:/login");
exit();
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。