【问题标题】:Php sessions weird behaviorPHP会话奇怪的行为
【发布时间】:2013-06-27 23:11:35
【问题描述】:

php 无法访问我的 tmp 目录。因此,会话无法真正工作(而且它们不会) 但在这种情况下,他们这样做是出于某种未知的原因。

这是场景,

我有一个页面 index.php,它验证用户凭据并设置会话变量并将用户重定向到 panel.php

if($verified)
{
$_SESSION['unid']=$unid;
$wel="Welcome :";
$_SESSION['una']=$user;
$_SESSION['level']=$lev;
$_SESSION['pas']=$pass;
$_SESSION['wel']=$wel;
header("location:panel.php");
}

在 panel.php 我有代码,

<?php
ob_start();
if(session_id()==''){
session_start();
}

if($_SESSION['una'] == "")
{
header("location:index.php");
}

当我通过 index.php 登录时,虽然无法读取会话数据,但 panel.php 会像正常使用会话一样打开

刷新页面时,会话消失并且页面重定向!

对这种行为有什么解释吗?

PHP V5.3.10

【问题讨论】:

  • 从哪里开始Session index.php
  • 在第一行,我有 session_start();

标签: php session


【解决方案1】:

您始终需要在页面开头致电session_start()。它实际上并不启动一个新会话,而是初始化会话,包括加载会话变量。这通常是您要做的第一件事,而且通常不仅在您当前的 panel.php 中这样的条件下。

【讨论】:

  • 我只需要一个逻辑来说明为什么会话条件得到满足,或者在从未存储会话时似乎在下一页上得到满足!我知道 session_start() 需要放在开头。但我故意按原样设置代码。我能够登录并立即将请求(修改标头)重定向到另一个页面(也需要登录)并且它有效!但在第一次请求之后,会话会恢复正常行为。
  • 如果没有存储会话信息,那么所有的会话信息将在每个请求结束时消失。因此,当您定向到另一个页面时,另一个页面对前一个页面的任何会话变量一无所知。重定向实际上只是一个新请求。它只是响应中的一个标头,告诉浏览器执行新请求。如果你足够快的话,会话信息并不是部分持久的......
  • 完全正确!!这正是我开始这个线程的原因。这正是我的想法,但这个奇怪的案例让我思考!我猜它与服务器的配置有关。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-03
  • 2017-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多