Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP升级5.2至5.3会话问题_Php_Session_Iis 7 - Fatal编程技术网

PHP升级5.2至5.3会话问题

PHP升级5.2至5.3会话问题,php,session,iis-7,Php,Session,Iis 7,我正在经历将服务器上的PHP从5.2升级到5.3的痛苦。将旧的php.ini迁移到新的并升级了mysql密码后,我的php会话不再工作 下面是我的登录代码,它正确执行,甚至在活动日志中正确记录我的登录。(updatelog函数)我还发布了我的会话有效检查代码 在我的登录代码中是否有任何明显的东西在PHP5.3中不再有效,之前在5.2下工作过 //登录用户/// if(@$_POST["dologin"] == 1) { //record login attempt updatel

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

下面是我的登录代码,它正确执行,甚至在活动日志中正确记录我的登录。(updatelog函数)我还发布了我的会话有效检查代码

在我的登录代码中是否有任何明显的东西在PHP5.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
                }   

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

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>';

经过反复讨论后,发现问题与最后一个会话名称有关,它以某种方式使整个浏览器会话无效,从会话中删除所有数据

删除
”(*@#_D@R*&$%(){*@)\u D_296“
$\u会话
数组中,我的登录会话重新开始工作。

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

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

谢谢你的更正,它在PHP5.2下的更改前后都有效,我不知道它是如何工作的,这很奇怪。但是在PHP5.3下,它没有区别。我得到了same session issueLooking at nothing真的会让你感到吃惊…也许你可以尝试运行代码(在测试环境中),并尽早包含以下语句:error_reporting(e_ALL)…以及查看日志?谢谢CR,我现在正在这样做。我发现我可以在同一个PHP页面上设置和查看会话变量,但我不能在页面之间查看它们……这表明可能是PHP配置问题……但我不知道的是……您正在执行会话_start()在您的php文件中?…如果仍然不起作用,请尝试回答这个问题。我是,在5.3升级之前,我有一个完全工作的站点。它似乎与头重定向有关。执行此操作时会话丢失。再次,仅在5.3下。如果我恢复到5.2,一切正常。我检查了session.save_路径。我从我的旧ph复制了该值p、 ini(有效)后续:如果我在页面a->b之间链接,会话将被保留。但是,当我使用标题重定向时,所有会话数据都将丢失。更新:查看服务器会话文件,会话数据不会保存在php 2.3下。会话文件已创建,但其中未保存任何数据。会话数据保存在5.2 ok下