[英]PHP Upgrade 5.2 to 5.3 Session Issue
我正在经历将服务器上的 PHP 从 5.2 升级到 5.3 的痛苦。 将我的旧 php.ini 迁移到新密码并升级我的 mysql 密码后,我的 PHP 会话不再有效。
这是我下面的登录代码,它可以正确执行,甚至可以在活动日志中正确记录我的登录。 (更新日志功能)我也贴出了我的 session 有效校验码。
我的登录代码中是否有任何明显的东西在 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");
}
}
// 检查用户登录 session 是否有效,这在我想通过登录限制的每个页面上调用。 ////
if(isset($_SESSION['_XXX(*@#!_D@R*&$%(){*@)_D_296']['user_agent']) == $_SERVER['HTTP_USER_AGENT'].SALT)
{
return 1; //session success
}else
{
return 0; //session failure
}
登录检查不是检查用户代理和盐的hash,应该是:
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 环境中试用,以确认它是 ZE1BFD762321E409CEE4AC0B6E 配置问题并使用简单页面测试 963CEE4AC0B6E尝试解决问题时的配置。
一个简单的 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>';
简单的解决方案:Go 到 /var/lib/php 并将属性 777 设置为“会话”目录。
编辑:是的,我知道这不是推荐的解决方案,但它有效。 为了正确,您应该将所有者设置为 php、httpd 或 nginx - 我没有时间检查它应该是哪个
经过一番混乱,事实证明问题与最后一个 session 名称有关,它以某种方式使整个浏览器 session 无效,从 Z21D6F40CFB511982E457ZA 中删除所有数据。
从$_SESSION
数组中删除"(*@#!_D@R*&$%(){*@)_D_296"
后,我的登录 session 再次开始工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.