-1

我有一个登录页面,用户在其中输入他的用户名和密码。如果成功,我将他重定向到我开始会话的 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(); if(!isset($_SESSION['lecturer_id'])) { 退出; }

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

4

4 回答 4

2

服务器很可能会以静默方式创建一个 PHP 会话,而您的本地服务器未配置为执行此操作。

尝试检查特定的$_SESSIONeg$_SESSION['x']而不仅仅是$_SESSION.

编辑:isset($_SESSION)您应该检查您专门设置的任何会话变量,而不是检查:isset($_SESSION['SESSION_VARIABLE_YOU_SET'])

isset($_SESSION)调用后返回 true session_start(),这就是为什么您需要检查$_SESSION您设置的特定变量的原因

于 2013-03-05T14:56:49.553 回答
1

您只需要确保您session_start();的 p1.php 页面和任何使用会话数据的页面都位于最顶部。

于 2013-03-05T17:21:02.953 回答
0

可能远程服务器配置为会话自动启动。如果你可以配置这个 php 实例,你可以在 php.ini 文件(session_autostart 指令)中检查它。

更新:对不起,我没有正确理解你的问题。真的,如果会话自动启动设置为“开”会话总是存在的。您不能使用 isset($_SESSION) 来确定用户是否已登录。

于 2013-03-05T15:01:02.197 回答
0

我遇到了同样的情况,我所做的是我取消了第一个变量,例如,$_SESSION['loggedin']),

我将首先使用以下方法取消设置:

session_start();
unset($_SESSION['loggedin']);

然后我会注释掉unset($_SESSION['loggedin'])

问题解决了。

于 2021-03-15T09:20:32.933 回答