【问题标题】:Session not working for first time, from second time it works会话第一次不工作,从第二次开始
【发布时间】:2016-03-07 07:53:37
【问题描述】:

我不知道是什么问题。当我在删除所有历史记录、cookie 和缓存后第一次登录时,它不会将会话设置为重定向页面。但是当我第二次登录时,会话设置为重定向页面。这里是第一页和第二页的代码。

首页

<?php
session_start();
include('includes/connection.php');
$email=$_POST['email'];
$password=$_POST['password'];

$data=mysqli_query($GLOBALS["___mysqli_ston"], "select * from  user_registration where email='$email' and password='$password' ");
$data1=mysqli_num_rows($data);
$val=mysqli_fetch_array($data);

if($data1>0)
{
   $_SESSION['user_id']=$val['user_id'];
   echo "<script>window.location.href='index.php'</script>";

}
else
{
    echo "<script>window.location.href='login.php'</script>";

}
?>

第二页

<?php 
  session_start();
  $val=$_SESSION['user_id'];
  echo $val;
?>

【问题讨论】:

  • 等等。 mysqli_query() 在创建连接之前?此外,SQL 容易受到 SQL 注入的攻击。
  • 您的首页也需要session_start(),最好是在您拨打的第一个电话时。如果不先调用 session_start(),您不能/不应该访问 $_SESSION
  • 是的,它在第一页,抱歉忘了提。 session_start();在第一页和页面顶部
  • mysqli_query() 连接在那里。我没有提到那个。数据库连接没问题,只有session
  • @ImranHussain 你找到解决方案了吗?我面临同样的问题。你能帮我吗?

标签: php session


【解决方案1】:

session_start();应该在两个脚本的最顶端!

会话变量保存在服务器上并分配一个唯一的代码,该代码在 cookie 中传递给浏览器。

因为 cookie 是由 headers 设置的,所以它们需要在其他任何事情之前发送!

即使脚本顶部的空格也可能导致会话 cookie 未在浏览器端正确设置。

所以总是这样启动两个脚本:

<?php
session_start();

// Rest of the code....

看起来他们在您的问题上排在首位,但我认为您稍后编辑了问题以放在那里。

这是会话第一次无法正常工作而第二次正常工作的唯一原因。

【讨论】:

    【解决方案2】:

    代替回声使用

    header("Location: index.php");
    

    编辑

    alsosession_start 应该在第一页的顶部声明,因为如果您在控制台环境中运行它,您将无法设置上下文中不存在的会话,您将收到以下错误 "$_SESSION['user_id'] does not exist in the current context"

    【讨论】:

    • 还是有这个问题。但我注意到,在不同的服务器和本地主机中它正在工作。
    【解决方案3】:

    同样的事情发生在这里。是 php 5.6 是个超级奇怪的问题。在某些页面上可以正常工作,而在某些页面上则不能。第一个请求就像没有得到认可.. :) 例如:设置 #当页面加载设置: $_SESSION['a']=0;

    #然后用JS请求增加$_SESSION['a']+=1;这开始处理第三个请求...

    【讨论】:

    • 这并不能真正回答问题。如果您有其他问题,可以点击 进行提问。要在此问题有新答案时收到通知,您可以follow this question。一旦你有足够的reputation,你也可以add a bounty 来引起对这个问题的更多关注。 - From Review
    • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center