isset($ _ SESSION)不在远程服务器上工作

时间:2013-03-05 14:54:29

标签: php

我有一个登录页面,用户输入他的用户名和密码。如果成功,我会将他重定向到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']))     {       出口;     }

页面总是退出,即未定义会话变量

4 个答案:

答案 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']);

问题解决了。