会话变量不起作用 php


Session variables not working php

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

<?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始终显示输出: 会话=您必须登录才能看到此页面。这意味着会话变量未设置或收件箱.php无法检索会话变量。我哪里出错了?

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

重定向后 PHP 会话丢失

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

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

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

如果您

使用连接脚本,请不要忘记在连接处使用session_start();,在注意到该问题之前遇到了一些麻烦。

也许如果您的会话路径无法正常工作session.save_path(path/to/any folder);您可以尝试将其用作替代路径。如果有效,您可以向您的托管服务提供商询问默认路径问题。

刚刚与托管服务交谈,这是他们最终的问题。他说"你的帐户session.save_path没有设置,结果出现了问题。我现在给你设置的。

在那之后它工作正常:)

也许它可以帮助别人,我自己有

session_regenerate_id(false);

我删除了它,一切都好!

登录后还可以...哎哟!

我遇到了类似的问题和cookie域:

    ini_set('session.cookie_domain', '.domain.com');

域设置错误,因此所有会话都被忽略,因为用户cookie从未正确设置,希望这会帮助某人。

会话无法工作的另一个重要原因是使用会话cookie设置,例如,由于简单的错误或其他开发人员出于某种原因将会话cookie生存期设置为0或其他低值。

session_set_cookie_params(0)

我今天遇到了这个问题。 这个问题与$config['base_url'] 有关。我注意到 htpp://www.domain.com,http://example.com 是问题所在。要修复 ,请始终将base_url设置为 http://www.example.com

我也

遇到了同样的问题,我做了以下步骤来解决问题

  1. 我编辑了文件/etc/php.ini并搜索了路径 session.save_path = "/var/lib/php/session",您必须提供会话信息

2 之后只是更改了下面给出的权限 *chown root.apache/var/lib/php/session *就是这样。以上这些步骤解决了我的问题

确保写入会话的值是简单类型。 复杂类型可能会导致从内存中删除所有会话更改。

我犯了一个错误,不小心设置了一个带有对象值的会话变量。 这会阻止会话序列化和保存。 在页面刷新之前,会话似乎有效。

验证这一点的一个好方法是执行 $_SESSION 的 var_dump() 和 exit() 以确保您编写的内容完全符合您的期望。

echo '<pre>Session: ';
var_dump($_SESSION);
echo '</pre>';
exit();

就我而言,我可以通过将我的用户名转换为字符串来解决此问题,如下所示:

$_SESSION['Username'] = (string)$userData->Username;

费用:睡一晚。

就我而言,以上都不起作用,那么我在顶部使用 ob_clean,它就像一个魅力。

ob_clean();
session_start();