2011-08-24 2 views
1

저는 처음부터 웹 사이트를 만들려고 노력 중이며 현재 세션 자료가 붙어 있습니다. 일반적으로 세션 작동 방식 및 저장 방법은 $_SESSION입니다. session_start() 이후이지만 내 주요 문제는 이것입니다. 캐쉬를 지우고 새 창을 열고 로그인 요청을 제출하면 FIRST 시간이 올바르게 제출되지 않고 페이지가 다시로드되고 아무 것도 변경되지 않았지만 처음에는 잘 작동합니다 ... 내 login.php는 다음 중 하나를 처리합니다. a) 게시물 요청 또는 b) "user/login.php? username = facebook & method = get"에 대한 링크가 아래 코드로 전송되어 로그인 할 사용자를 설정하도록 url을 통한 로그인 (테스트 목적)PHP 로그인 세션은 캐시가없는 새 창에서 첫 페이지로드시 작동하지 않습니다.

<?php 
session_start(); 
$method = $_GET['method']; 
if($method == "get") $_SESSION['username'] = $_GET['username']; 
else $_SESSION['username'] = $_POST['username']; 
header('Location: http://www.imggroups.com'); 
?> 

이 문제는 중요하지 않지만 인덱스 페이지에서 사용자가이 작업을 수행하여 로그인했는지 확인합니다. 분명히 세션을 시작한 다음. if(isset($_SESSION['username'])) echo 로그인해야합니다. 다른 사람은 로그인하지 않은 내용을 반향합니다. .....

답변

2

문제는 사용자를 새 페이지로 리디렉션하고 있지만 이전 페이지가 닫히지 않았기 때문에 세션이 아직 저장되지 않았습니다.

이 문제를 해결하기 위해 보통 올바른 페이지로 리디렉션되는 중간 페이지를 설정합니다. 또한

당신이 만약

+0

정답을 역전 했으므로이 작업을하지 않았다고 가정합니다. 여기에 나열된 내용을 시도해보십시오. http://www.php.net/manual/en/function.session-write-close .php # 86791 – ChrisK

0

리디렉션 헤더를 사용하기 전에 session_write_close()을 (http://www.php.net/manual/en/function.session-write-close.php) 사용할 수 있습니다 login.php의 총, 나는 그렇게 할 수있는 쉬운 방법이 생각 : 그것은 사용자 이름이 실제로 _GET 나 _POST를 통해 들어오는 여부 문제가되지 않는 경우가 모두 캡슐화로

  1. 는 다음 _REQUEST를 사용합니다.

    if(isset($_POST['username']) { 
        $_SESSION['username'] = $_POST['username']; 
    } else if(isset($_GET['username']) { 
        $_SESSION['username'] = $_GET['username']; 
    } else { 
        // whinge 
    } 
    

나는 그 문제로 실행되지했습니다 :이 문제 않으면

if(isset($_POST['username']) { 
    $_SESSION['username'] = $_REQUEST['username']; 
} 
  • , 당신은 단지 거기에 무엇을보고, 외부 매개 변수를 신뢰하거나 사용할 필요가 없습니다 이전에는 PHP를 사용했지만 session_write_close(); 세션이 다른 페이지로 리디렉션되기 전에 세션을 기록하도록합니다.

  • 1

    사실은 세션을 설정하고 있지만 세션을 허용하지 않는 다른 도메인으로 리디렉션하고 있습니다. 'www.'없이 웹 사이트에 접속하면 앞에서 www 버전으로 리디렉션되면 세션이 존재하지 않는다고 말할 것입니다.

    session_set_cookie_params(0, '/', ".imggroups.com"); 
    

    session_start() 전에 넣어 그 사이트의 www 버전 및 www가없는 버전 모두를 위해 작동합니다 다음 사용합니다.

    +1

    또는 header ("location : index.php")를 사용할 수 있습니다. 같은 도메인에 머물기 – ChrisK

    관련 문제