我有一个登录页面,用户输入他的用户名和密码。如果成功,我会将他重定向到index.php,我开始会话:
session_start();
从index.php他可以导航到另一个页面(“p1.php”)并在“p1.php”之上我有这个检查:
<?php
if(!isset($_SESSION))
{
exit;
}
?>
这适用于我的本地服务器,但是当我在远程服务器!isset($_SESSION)
上部署它时,总是返回true。
这里可能会发生什么?
编辑:我在托管服务提供商方面发现了一个在php.ini中添加它的请求:session_save_path("your home directory path"/phpsessions);
并在我的路径中创建一个phpsessions文件夹。
我做了,但没有帮助。
我也尝试过这样做:
index.php中的:
session_start();
if(isset($_REQUEST['lecturer_id']))
{
echo "lecturer_id set";
$_SESSION['lecturer_id'] = $_REQUEST['lecturer_id']; // store session data
}
并在p1.php中: 在session_start(); 如果(!isset($ _ SESSION [ 'lecturer_id'])) { 出口; }
页面总是退出,即未定义会话变量
答案 0 :(得分:2)
服务器很可能是静默创建一个PHP会话,而本地服务器没有配置它。
尝试检查特定的$_SESSION
,例如$_SESSION['x']
,而不仅仅是$_SESSION
。
编辑:
不要检查isset($_SESSION)
,而应检查您具体设置的会话变量:isset($_SESSION['SESSION_VARIABLE_YOU_SET'])
isset($_SESSION)
后, session_start()
会返回true,这就是您需要检查所设置的特定$_SESSION
变量的原因
答案 1 :(得分:1)
您只需要确保在p1.php页面的最顶部和使用会话数据的任何页面都有session_start();
。
答案 2 :(得分:0)
远程服务器可能配置为会话自动启动。如果你可以配置这个php实例,你可以在php.ini文件(session_autostart指令)中查看它。
更新:抱歉,我的问题不正确。实际上,如果会话自动启动设置为“打开”会话始终存在。您不能使用isset($ _ SESSION)来确定用户是否已记录。
答案 3 :(得分:0)
我遇到了同样的情况,我所做的是取消第一个变量的设置,例如 $_SESSION['loggedin']
),
我将首先使用 :
取消设置session_start();
unset($_SESSION['loggedin']);
然后我会注释掉unset($_SESSION['loggedin'])
;
问题解决了。