【问题标题】:PHP Upgrade 5.2 to 5.3 Session IssuePHP 升级 5.2 到 5.3 会话问题
【发布时间】:2011-10-24 07:17:07
【问题描述】:

我正在经历将服务器上的 PHP 从 5.2 升级到 5.3 的痛苦。将我的旧 php.ini 迁移到新的并升级了我的 mysql 密码后,我的 PHP 会话不再工作。

这是我下面的登录代码,它可以正确执行,甚至可以在活动日志中正确记录我的登录。 (更新日志功能)我还发布了我的会话有效校验码。

我的登录代码中是否有任何明显的东西在 PHP 5.3 中不再有效,以前在 5.2 下工作过?

// 登录用户///

if(@$_POST["dologin"] == 1)
{
    //record login attempt
    updatelog("",$_SERVER['REMOTE_ADDR'],"Login Attempt By: ".$_POST['username']);

    $user_name = escape($_POST["username"]);
    $password = escape(md5(SALT.$_POST["password"]));

    $login = $query->GetSingleQuery("--SINGLE","SELECT user_name, id, user_email FROM url_users WHERE user_name='".$user_name."' and user_password='".$password."';",array("user_name","id","user_email"));

    if(!isset($login['user_name'])) //failed login
    {
        $_SESSION['loggedin'] = 0;
        //record failure
        updatelog("",$_SERVER['REMOTE_ADDR'],"Login Failure By: ".$_POST['username']);
        header("Location: index.php?failed=1&user=$user_name");
    }else
    { 
    //login valid
    //get country details
    $getcountry = $query->GetSingleQuery("--SINGLE","SELECT geo_ip.ctry FROM admin_adfly.geo_ip geo_ip WHERE INET_ATON ('".$_SERVER['REMOTE_ADDR']."') BETWEEN geo_ip.ipfrom AND geo_ip.ipto;",array("ctry"));

    //set session items
        $_SESSION['country'] = $getcountry['ctry'];
        $_SESSION['username'] = $login['user_name']; 
        $_SESSION['userid'] = $login['id']; 
        $_SESSION['loggedin'] = 1;
        $_SESSION['email'] = $login['user_email'];
    //session salt
        $hsh = md5($_SERVER['HTTP_USER_AGENT'].SALT);
        $_SESSION['_XXX(*@#!_D@R*&$%(){*@)_D_296']['user_agent'] = $hsh;

    //update the ui transaction log
        updatelog($login['id'],$_SERVER['REMOTE_ADDR'],"Login Success For: ".$_POST['username']);

        // run function to check if any adverts have completed
        adcomplete($_SESSION['userid']);

    //redirect
        header("Location: index.php");
    }

}

// 检查用户登录会话是否有效,这在我想通过登录限制的每个页面上调用。 ////

if(isset($_SESSION['_XXX(*@#!_D@R*&$%(){*@)_D_296']['user_agent']) ==  $_SERVER['HTTP_USER_AGENT'].SALT)
                {
                    return 1; //session success
                }else
                {
                    return 0; //session failure
                }   

【问题讨论】:

  • 跟进:如果我在页面 a->b 之间链接,会话将被保留。但是,当我使用标头重定向时,所有会话数据都会丢失。
  • 更新:查看服务器会话文件,会话数据不会保存在 php 2.3 下。会话文件已创建,但其中不保存任何数据。会话数据保存在 5.2 下 ok

标签: php session iis-7


【解决方案1】:

登录检查不是检查用户代理和盐的哈希,应该是:

if (isset($_SESSION['_XXX(*@#!_D@R*&$%(){*@)_D_296']['user_agent']) == md5($_SERVER['HTTP_USER_AGENT'].SALT))
{
    return 1; //session success
} else {
    return 0; //session failure
}

编辑:

由于问题依然存在,而且似乎是php配置问题,我会尝试制作使用会话的最简单的php页面,并在5.3环境中尝试,以确认它是php配置问题并使用那个简单的页面在尝试解决问题时测试配置。

一个简单的php页面:

<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');
session_start();

if (isset($_SESSION['views']))
    $_SESSION['views'] = $_SESSION['views'] + 1;
else
    $_SESSION['views'] = 0;

echo '<pre>';
var_dump(session_id()); // I should stay the same
var_dump($_SESSION); // I should start at 0 and increase
echo '</pre>';

【讨论】:

  • 感谢您的更正,它在 PHP 5.2 下的更改前后都有效,很奇怪,我不知道它是如何工作的。然而,在 PHP 5.3 下,它没有任何区别。我遇到了同样的会话问题
  • 看着php.net/manual/en/migration53.incompatible.php,你真的没有什么想不开的……也许你可以尝试运行代码(在测试环境中),并尽早包含以下语句:error_reporting(E_ALL); ...并查看日志?
  • 感谢 CR,我现在正在这样做。我发现我可以在同一个 PHP 页面上设置和查看会话变量,但我无法在页面之间查看它们.....这表明这可能是 PHP 配置问题......但我没有不知道....
  • 你在你的 php 文件中做 session_start() 吗? ...如果它仍然不起作用,请尝试通过这个问题stackoverflow.com/questions/155920/…
  • 我是,在 5.3 升级之前我有一个完整的工作站点。它似乎与标头重定向有关。执行此操作时会话丢失.. 再次仅在 5.3 下。如果我恢复到 5.2,一切都很好。我确实检查了 session.save_path。我从旧的 php.ini 中复制了值(有效)
【解决方案2】:

简单的解决方案: 转到 /var/lib/php 并将属性 777 设置为“会话”目录。

编辑: 是的,我知道这不是推荐的解决方案,但它有效。为了正确,您应该将所有者设置为 php、httpd 或 nginx - 我没有时间检查它应该是哪个

【讨论】:

    【解决方案3】:

    经过一番折腾,事实证明问题与最后一个会话名称有关,它以某种方式使整个浏览器会话无效,从会话中删除了所有数据。

    $_SESSION 数组中删除"(*@#!_D@R*&amp;$%(){*@)_D_296" 后,我的登录会话再次开始工作。

    【讨论】:

      猜你喜欢
      • 2012-07-23
      • 2018-10-18
      • 2010-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多