【问题标题】:PHP $_SESSION not working [duplicate]PHP $_SESSION 不工作 [重复]
【发布时间】:2012-02-01 14:43:21
【问题描述】:

可能重复:
PHP session seemingly not working

我目前正在编写自己的 CMS 以获取乐趣,但是当我使用 $_SESSION 时,它不起作用。会话未保存...

这是我的代码:

<?php
include('header.php');
if (isset($_SESSION['logged_in']))
{
    $link = 'profile.php';
    $link_name = 'Profile';
}
else
{
    $link = 'login.php';
    $link_name = 'Login';
}

if (isset($_POST['action']))
{
    $username = mysql_real_escape_string($_POST['username']);
    $password = mysql_real_escape_string($_POST['password']);
    $password = md5($password);
    $user = mysql_query("SELECT * FROM users WHERE `username`='".$username."'");
    if (mysql_num_rows($user) == 1)
    {
            while ($userinfo = mysql_fetch_array($user))
            {
                    if ($userinfo['banned'] != true)
                    {
                            $_SESSION['user_id'] = $userinfo['id'];
                            $_SESSION['username'] = $userinfo['username'];
                            $_SESSION['logged_in'] = "true";
                            header('Location: index.php');
                    }
                    else
                    {
                            header('Location: login.php?error=banned');
                    }
            }
    }
    else if (mysql_num_rows($user) == 0)
    {
            header('Location: login.php?error=not-found');
    }
}
?>

在代码中,我在数据库中获取用户信息,然后检查用户是否被禁止。如果没有,我设置我的 $_SESSION[] 并重定向到主页...

【问题讨论】:

  • 除非它在header.php 中,否则您省略了session_start()。在您访问$_SESSION 的每个脚本上,您必须在访问或设置$_SESSION 中的任何内容之前调用它。
  • 你有没有 session_start();在每一页的顶部?
  • @Michael 它在header.php...
  • @dSquared 是的,在header.php

标签: php session


【解决方案1】:

首先你需要session_start()

【讨论】:

  • PHP中没有这个功能。
  • @Frederick:会话,如果 _start()'d,将在脚本退出时自动保存。您可以使用session_write_close() 强制保存,但如果您进行任何更改,这会阻止以后自动保存 - 您必须再次使用 session_start() 才能重新打开它。
  • 您也总是需要确保在 session_start() 之前没有异常空白。防止这种情况发生的最好方法是永远不要?&gt;放在源代码文件的末尾。
【解决方案2】:

您应该在脚本开头调用session_start()。确保在需要访问会话变量的每个页面上都调用它

【讨论】:

    【解决方案3】:

    确保 session_start() 被调用。使用 Tamper Data 检查已发送和已接收请求的标头。您正在寻找来自服务器的 Set-Cookie 标头和来自客户端的 Cookies 标头。这应该包含您的 PHPSESSID。如果你没有看到这个,那么你的会话没有开始。祝你好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-08
      • 2023-03-05
      • 2012-06-23
      • 2014-09-20
      • 2011-09-12
      • 1970-01-01
      • 2016-03-17
      • 1970-01-01
      相关资源
      最近更新 更多