会话变量不起作用 php

2022-08-30 19:25:36

以下是我的登录页面的代码,其中登录脚本检查用户的真实性,然后使用标头功能重定向到收件箱页面。

<?php
session_start();

include_once('config.php');
$user=htmlentities(stripslashes($_POST['username']));
$password=htmlentities(stripslashes($_POST['password']));
// Some query processing on database    

if(($id_user_fetched<=$id_max_fetched) && ($id_user_fetched!=0)){
$_SESSION['loggedIn'] = 'yes';
    header("Location:http://xyz/inbox.php?u=$id_user_fetched");
    //echo 'Login Successful';
    }else{
        echo 'Invalid Login';
        echo'<br /> <a href="index.html">Click here to try again</a>';
        }
}else{
    echo mysqli_error("Login Credentials Incorrect!");
    }
?>

收件箱.php页面如下所示:

<?php
session_start(); 
echo 'SESSION ='.$_SESSION['loggedIn'];
if($_SESSION['loggedIn'] != 'yes'){
echo $message = 'you must log in to see this page.';
//header('location:login.php');
}
 //REST OF THE CODE

?>

现在有了上面的代码,收件箱.php总是显示输出:SESSION=你必须登录才能看到这个页面。这意味着未设置会话变量或收件箱.php无法检索会话变量。我哪里出错了?


答案 1
  1. 确保在调用任何会话之前调用 。因此,一个安全的选择是将其放在页面的开头,紧跟在开始标记之后,然后再放在其他任何内容之前。还要确保在开始标记之前没有空格/制表符。session_start();<?php<?php
  2. 重定向后,使用结束当前脚本(其他人也建议和,您也可以尝试这些脚本,但我会使用)。headerexit();session_write_close();session_regenerate_id(true)exit();
  3. 确保在您用于测试它的浏览器中启用了 Cookie。
  4. 确保 已关闭,您可以在文件上检查此内容,也可以使用 .请参阅内容,了解如何将其关闭。register_globalsphp.iniphpinfo()
  5. 确保您没有删除或清空会话。
  6. 确保超全局数组中的密钥未在任何地方被覆盖。$_SESSION
  7. 请确保重定向到同一域。因此,从 a 重定向到不会将会话向前推进。www.yourdomain.comyourdomain.com
  8. 确保您的文件扩展名是(它发生!.php

重定向后 PHP 会话丢失


答案 2

我有一段时间遇到同样的问题,很难弄清楚。我的问题是,我让网站工作了一段时间,会话正常工作,然后突然间一切都坏了。

显然,你的session_save_path(),对我来说是/var/lib/php5/,需要有正确的权限(运行php的用户,例如www-data需要对目录的写入权限)。我不小心改变了它,完全打破了会话。

运行,然后使 php 用户有权访问该文件夹。sudo chmod -R 700 /var/lib/php5/sudo chown -R www-data /var/lib/php5/


推荐