我在我的网站上进行了自定义登录,并通过$ _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="
当你登录但刷新同一页面会发生什么?你可以重定向到自己的表单动作,并设置会话,然后var_dump()它看看它是否设置? – AdRock
检查您的php.ini中的[Session]中的设置...通常,HTTP是无状态的,因此需要将会话标识与每个新请求一起传递。 PHP使用cookie或重写URL并向所有链接添加GET参数(默认情况下,这两个变量都命名为PHPSESSID)。如果您的应用程序正在丢失会话,则这两种方法都会失败。你的问题相当宽泛,只需回答它。 –
在附注中,为什么要序列化要加入会话的数据?当你想要访问它时,这只会产生额外的工作让你反序列化,而且完全没有必要。 – CBroe