2010-02-26 6 views
2

아약스를 사용하는 시스템에서 간단한 로그를 만들려고하는데 문제는 $ _SESSION을 설정하지 않았기 때문입니다.

login.js :

$('#bt-login').click(function(){ 
     var login = $('#login').serialize(); 
     $.ajax({ 
      type: "POST", 
      url: 'widgets/Login/loginFunction.php', 
      data: login, 
      cache: false, 
      success: function(msg){alert(msg)} 
     }); 
}); 

loginFunction.php :

<?php 
    include_once '../../dbConfig.php'; 
    include_once '../../config.php'; 

    session_start(); 

     $usr = mysql_escape_string($_POST['username']); 
     $pass = mysql_escape_string($_POST['password']); 
     $remember = intval($_POST['rememberMe']); 

     $row = mysql_fetch_assoc(mysql_query("SELECT usr, id FROM members WHERE usr='".$usr."' AND pass='".md5($pass)."'")); 

     if($row['usr']){ 
      $_SESSION['usr'] = $row['usr']; 
      $_SESSION['id'] = $row['id']; 
      $_SESSION['rememberMe'] = $remember; 
      setcookie('DirtPileGames',$remember); 
     } 

?> 

지금 어떤 이유로 loginFunction.php은 $ _SESSION 설정되지 않습니다. 새로 고침을하고 $ _SESSION이 비어 있습니다.

아무도 아이디어가 작동하지 않는 이유가 무엇입니까?

+0

이것은 내가 지금까지 알아 낸 것입니다. session_name 함수를 사용하여 원하는 이름으로 쿠키를 만듭니다. 아약스가 실행되면 PHPSESSID라는 다른 쿠키가 생성됩니다. 그래서 나는 두 번째 쿠키를 만들지 않고 이름을 지정하는 방법을 알아 내야 만합니다. 오, 네, session_name을 포함시키지 않으면 스크립트가 제대로 작동합니다. – WAC0020

+0

좋아, 알아 냈어. 메인 파일과 아약스 파일에 session_name과 session_set_cookie_params를 넣어야했습니다. 이게 맞는지는 모르겠지만 작동합니다. – WAC0020

답변

1

실수로 session_destroy()를 어딘가에 호출하지 않는다고 가정하면 세션이 유효해야하기 때문에 특정 문제를 알 수 없습니다. 디버깅을위한 몇 가지 조언 - 페이지에서 session_id()가 일치하는지 확인하십시오. 그것이 재미있는 일이 없다면. Session_write_close()를 명시 적으로 호출 할 수있었습니다. 또한 오류 케이스 (사용자가 없을 때)에 대해 $ _SESSION을 설정하여 간단한 논리 오류가 아닌지 확인하십시오. 또한 md5를 사용하지 마십시오. 몇 가지 변종을 사용하고 그것을 소금.

편집 : 당신은 session_name을 언급()

이 호출하면 다른 페이지에 참조 할 수 있도록 세션의 이름을 해결합니다. 세션의 이름을 동일하게 지정하지 않고 다른 페이지에서 session_start()를 수행하면 새 ID로 새 세션이 생성됩니다.

PHP 설명서의 참고 사항 : 세션 이름은 요청 시작시 session.name에 저장된 기본값으로 재설정됩니다. 따라서 모든 요청에 ​​대해 (그리고 session_start() 또는 session_register()가 호출되기 전에) session_name()을 호출해야합니다.

+0

나는 session_id를했고 두 개의 다른 ID를 얻고있다. 사이트의 주요 부분은 내가 33a77eefa3a27732485fd86245661548지만 내 아약스에 사용되는 PHP 파일을 받고 오전 7c54561b0fcb89765db0b9da4a2a83d3지고있다. – WAC0020

2

세션 변수에 액세스하거나 설정할 때마다 session_start()를 호출해야합니다. session_start()를 먼저 호출하지 않으면 페이지를 새로 고칠 때 비어있게됩니다.

0

세션 쿠키에 의존하고, 많은 문제는 PHP를 스택에 의존이 문제를 정리할 경우

setcookie('DirtPileGames',$remember); 

참조 생략하려고합니다.

관련 문제