1
error_reporting(E_ALL);
session_start();
var_dump($_SESSION['user']);
require 'config/database.php';    
var_dump($_SESSION['user']);

我有问题,因为在包含 databse.php 文件后我失去了会话......

数据库.php

$user = "xxx";
$password = "xxx";
$database = "xxx";
$server = '98.x.x.126';

mysql_connect($server, $user, $password);
mysql_select_db($database);

PHP 版本:5.2.17,共享服务器。在我的本地服务器 5.3 和 5.4 上运行良好。

更新:我不会完全丢失会话,只是将用户值更改为数据库名称?

更新2:

var_dump($_SESSION['user']);
$user = "denes_lucky";
var_dump($_SESSION['user']);
$password = "123456X3M";
var_dump($_SESSION['user']);
$database = "denes_lucky";
var_dump($_SESSION['user']);
$server = '98.130.0.126';
var_dump($_SESSION['user']);

mysql_connect($server, $user, $password);
var_dump($_SESSION['user']);
mysql_select_db($database);
var_dump($_SESSION['user']);

问题出在 $user = "xxx"; 之后

4

2 回答 2

2

关闭register_globals您的php.ini.htaccess

当它们打开时 - 分配$user = 'foo';也修改了$_SESSION['user']变量的内容。

于 2012-12-17T10:44:22.680 回答
1

问题是您正在运行一个过时的 PHP 版本并register_Globals 打开了该设置。register_globals 是 PHP 中的一个特性,它使会话和请求变量成为全局变量。这意味着 $_SESSION['user'] 和 $user 引用同一个变量。

最好的解决方案是register_globals在你的 php.ini 中打开(甚至更新到没有该功能的最新 PHP 版本)

一种解决方法是重命名这些变量之一。

另见: http: //php.net/register_globalshttp://php.net/security.globals

于 2012-12-17T10:44:34.100 回答