Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php isset($\u会话)在远程服务器上不工作_Php - Fatal编程技术网

Php isset($\u会话)在远程服务器上不工作

Php isset($\u会话)在远程服务器上不工作,php,Php,我有一个登录页面,用户在其中输入用户名和密码。如果成功,我将他重定向到index.php,在那里我开始一个会话: session_start(); 从index.php,他可以导航到另一个页面(“p1.php”),在“p1.php”的顶部,我有以下检查: <?php if(!isset($_SESSION)) { exit; } ?> 并在我的路径中创建phpsessions文件夹 我做了,但那没用 我也试着这么做: 在index.php中: session_sta

我有一个登录页面,用户在其中输入用户名和密码。如果成功,我将他重定向到index.php,在那里我开始一个会话:

session_start();
从index.php,他可以导航到另一个页面(“p1.php”),在“p1.php”的顶部,我有以下检查:

<?php
if(!isset($_SESSION)) 
{ 
    exit;
} 
?>
并在我的路径中创建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中: 会话_start(); 如果(!isset($\会话['讲师id'])) { 出口 }


并且页面始终存在,即未定义会话变量

服务器很可能正在以静默方式创建一个PHP会话,而本地服务器没有配置该会话

尝试检查特定的
$\u会话
例如
$\u会话['x']
,而不仅仅是
$\u会话

编辑: 您不必检查
isset($\u SESSION)
您应该检查您专门设置的会话变量:
isset($\u SESSION['SESSION\u variable\u you\u set'])


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

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


更新:对不起,我没有正确理解你的问题。实际上,如果会话autostart设置为“开”,则会话始终存在。您不能使用isset($\u SESSION)来确定用户是否已登录。

您只需确保您有
SESSION\u start()
位于p1.php页面和任何使用会话数据的页面的顶部。

我遇到了相同的情况,我所做的是取消设置第一个变量,例如,
$\u session['loggedin']

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

session_start();
unset($_SESSION['loggedin']);
然后我将注释掉unset($_SESSION['loggedin'])


问题已解决。

是否启用了错误?是否在p1.php页面中发出会话_start()?是否为
会话_start()
在每页的顶部,还是包含在
if
语句中?index.php页面顶部没有会话开始我不明白为什么这个重要的问题会得到负面评价!不管代码是什么,这家伙告诉你它在他的本地服务器上工作。所以,试着把注意力集中在实际问题上:“为什么它不能在远程服务器上工作?”。我有同样的问题,我的代码当然可以(session_start()在顶部,等等)。如果设置了
$\u session['key']
,那么
isset($\u session)
肯定会返回true。PHP会话id没有存储在$\u会话中的任何位置。如何找到“x”?我应该联系我的主机提供商吗?在我的回答中添加了更多的细节。我在index.php中的SESSION\u启动之后添加了echo var\u dump($\u SESSION),它返回“array(0){}”,如果调用
isset()
,它将解析为true。您需要检查特定的$\u会话索引。如果它是自动启动的,不总是设置$\u会话吗?不。在php手册中—“session_start()根据通过GET或POST请求传递的会话标识符或通过cookie传递的会话标识符创建会话或恢复当前会话。”好的,但当我现在在p1.php中执行session_start()时,我会问“如果(!isset($_session['讲师_id'))退出,这仍然存在注意:我从index.php调用p1.php的方法是不带参数地加载p1.php页面。这可以吗?@Kam我不确定我是否理解,但请确保您正确地使用字符串或整数等值设置了
$\u会话['讲师id']
。任何带有
session\u start()
的页面都可以访问该会话变量。在每个使用会话数据的页面上(或者为了安全起见,每个页面上),您都需要基本的两行
session\u start()
,然后是
if(!isset($\u session['讲师\u id'))退出
.ok在index.php中我做了以下操作:session_start()$_会话['讲师id']=1;
session_start();
unset($_SESSION['loggedin']);