PHP升级5.2至5.3会话问题
我正在经历将服务器上的PHP从5.2升级到5.3的痛苦。将旧的php.ini迁移到新的并升级了mysql密码后,我的php会话不再工作 下面是我的登录代码,它正确执行,甚至在活动日志中正确记录我的登录。(updatelog函数)我还发布了我的会话有效检查代码 在我的登录代码中是否有任何明显的东西在PHP5.3中不再有效,之前在5.2下工作过 //登录用户///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
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下