2013-12-09 64 views
2

我在我的网站上进行了自定义登录,并通过$ _SESSION var来管理登录用户。我的问题在登录操作后附加。在下一页我控制登录信息,如果一切正确,我保存连接的用户ID在$_SESSION['currentUser'] = serialize($successUser);更改页面时会丢失session var

但现在,如果我导航到另一个页面,我没有登陆了...就像如果$ _SESSION VAR没有正确保存...我的问题

一部分是在我的服务器配置。我通过更改php.ini中的session.save_path来纠正它。

但现在我的问题仍然存在于我的一个Web应用程序中。所以在某处存在编码错误。任何人都可以帮我找出答案吗?这里是我的代码:

每一页的开头为:

<?php 
include('includes.php'); 

//page header 
include("header.php");?> 
<header class="sheet"> 
    <h1>About...</h1> 
</header> 
<p>Lorem Ipsum... 

includes.php:

<?php //includes.php 
session_start(); 

//includes classes 
require_once 'classes/User.php'; 
require_once 'classes/Event.php'; 
require_once 'classes/Address.php'; 
.... 

//Globale vars 
$currentUser = (isset($_SESSION['currentUser']))?unserialize($_SESSION['currentUser']):NULL; 

//Includes services 
require_once 'services/SrvCRUD.php'; 
require_once 'services/SrvCRUD_User.php'; 
... 
require_once 'services/SrvFct_User.php'; 
require_once 'services/SrvFct_Address.php'; 
require_once 'services/SrvFct_Event.php'; 
... 

//pages actions 
include('page_actions.php'); 

的header.php:

<!DOCTYPE html> 
<html> 
    <head> 
    <title>...</title></head><body> 
... 

感谢您的帮助。

P.S:我在互联网上搜索了很多关于我的问题,我已经检查了当前的错误,如<?php session_start()...之前的空白。 如果我var_dump我的$ _SESSION,它表明我的变量不在下一个页面上存在...

编辑:由于这个问题似乎是一个配置问题,这里是我的PHP的会话部分 。 ini

[Session] 
session.save_handler = files 
session.save_path = /home/users/***complete-path-censored***/tmp 
session.use_cookies = 1 
session.use_only_cookies = 1 
session.name = PHPSESSID 
session.auto_start = 0 
session.cookie_lifetime = 0 
session.cookie_path =/
session.cookie_domain = 
session.cookie_httponly = 
session.serialize_handler = php 
session.gc_probability = 1 
session.gc_divisor = 1000 
session.gc_maxlifetime = 1440 
session.bug_compat_42 = Off 
session.bug_compat_warn = Off 
session.referer_check = 
session.entropy_length = 0 
session.entropy_file = /dev/urandom 
session.cache_limiter = nocache 
session.cache_expire = 180 
session.use_trans_sid = 1 
session.hash_function = 0 
session.hash_bits_per_character = 4 
url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=,fieldset=" 
+1

当你登录但刷新同一页面会发生什么?你可以重定向到自己的表单动作,并设置会话,然后var_dump()它看看它是否设置? – AdRock

+0

检查您的php.ini中的[Session]中的设置...通常,HTTP是无状态的,因此需要将会话标识与每个新请求一起传递。 PHP使用cookie或重写URL并向所有链接添加GET参数(默认情况下,这两个变量都命名为PHPSESSID)。如果您的应用程序正在丢失会话,则这两种方法都会失败。你的问题相当宽泛,只需回答它。 –

+0

在附注中,为什么要序列化要加入会话的数据?当你想要访问它时,这只会产生额外的工作让你反序列化,而且完全没有必要。 – CBroe

回答

0

好的......正如CBroe说我正在序列化数据。我很想知道是否真的有必要序列化对象,所以我搜索了一下。我了解到,会话会自动序列化对象,但必须在session_start()之前声明您的类才能正确解序列化它。我做了这个简单的改变来改善我的代码,并且由于我无法理解的原因,这个改变也解决了我的问题......不知道为什么。我刚刚删除了un// serialize方法,并在会话开始之前声明了模型...如果有人知道为什么,我会有兴趣知道:)?!! 谢谢大家的帮助和建议