2013-12-09 3 views
2

내 웹 사이트에서 사용자 정의 로그인을했고 로그인 한 사용자를 $ _SESSION var을 통해 관리합니다. 내 문제는 로그인 작업 후에 추가됩니다. 다음 페이지에서 로그인 정보를 제어하고 모든 것이 정확하면 연결된 사용자 ID를 $_SESSION['currentUser'] = serialize($successUser);에 저장합니다.페이지를 바꿀 때 세션 변수가 손실됩니다.

하지만 지금은 다른 페이지로 이동하면, 나는 ...을 $ _SESSION var에 제대로 저장되지 않은 경우처럼 ... 더 이상 로그인하지 않은거야 내 문제의

일부는 내 서버 구성에 있었다 . php.ini 파일에서 session.save_path를 변경하여 문제를 해결했습니다.

그러나 지금 내 문제는 내 웹 응용 프로그램 중 하나에 있습니다. 그래서 어딘가에 코딩 오류가 있습니다. 누구든지 나를 찾을 수 있도록 도와 줄 수 있습니까?

모든 페이지로 시작 : 여기 내 코드입니다

<?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()... 앞에있는 공백과 같은 현재 오류를 확인했습니다. 이 문제는 여기에, 구성 문제가 될 것으로 보인다 내 PHP의 세션 부분으로 : 내 $에 _SESSION을 var_dump 경우 , 그것은 내 변수가 ... 다음 페이지에

EDIT 존재하지 않음을 보여줍니다. 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의 [세션] 설정을 확인하십시오 ... 일반적으로 HTTP는 상태가 저장되지 않으므로 모든 새로운 요청과 함께 세션 ID를 전달해야합니다. PHP는 쿠키를 사용하거나 URL을 다시 쓰고 모든 링크에 GET 인수를 추가합니다 (두 변수의 기본값은 PHPSESSID입니다). 앱이 세션을 잃어 버리면이 두 가지 방법 모두 실패합니다. 귀하의 질문은 정확하게 대답하기 만하면됩니다. –

+0

참고로 세션에 넣고있는 데이터를 왜 직렬화하고 있습니까? 이것은 단지 당신이 그것을 접근하기를 원할 때 그것을 unserialize하기위한 여분의 작업을 생성하고, 완전히 불필요합니다. – CBroe

답변

0

좋아요 ... CBroe가 데이터를 직렬화하고 있다고 말했습니다. 객체를 직렬화하는 것이 정말로 필요한지 알고 싶었 기 때문에 검색을 수행했습니다. 세션이 자동으로 객체를 직렬화하지만 session_start() 전에 클래스를 선언해야 세션을 올바르게 직렬화 할 수 없다는 것을 알게되었습니다. 나는 코드를 개선하기 위해이 간단한 변화를 만들었고, 이해할 수없는 이유로이 변화가 내 문제를 해결했다. 이유는 모르겠다. 난 그냥 un -/serialize 메서드를 제거하고 세션을 시작하기 전에 모델을 선언 ... 누군가가 왜 알고, 나는 정보통에 관심이있을 것이라고 :)? !! 귀하의 도움과 조언에 감사드립니다.

관련 문제