2017-12-03 8 views
1

날 로그 아웃되지로 세션()는 다음 다시 나를 아직도</p> <p>logout.php에 로그인 한 것이다 로그인을하지 않고 보호되는 페이지로 이동

<?php 

session_start(); 
session_unset(); 
session_destroy(); 
header("Location: ../index.php"); 
exit(); 
?> 

login.php

$userlogin = user_login($email, $password.$salt); 
    if ($userlogin==false){ 
     $errors[]='Wrong email/password combination.'; 
    } else { 
    //set the user session 
     $_SESSION['UserId']=$userlogin; 
     $_SESSION['LoginIP']=$_SERVER['REMOTE_ADDR']; 
     $db->query("UPDATE users SET ipadd='".$_SERVER['REMOTE_ADDR']."' WHERE user_id=".$_SESSION['UserId'].""); 
     echo '<meta http-equiv="refresh" content="0; URL=index.php">'; 

점검 코드에서 로그인

/* Check if user is logged in or not */ 
function loggedin(){ 
return (isset($_SESSION['UserId'])) ? true : false; 
} 
if (loggedin()==true){ 
$session_user_id = $_SESSION['UserId']; 
$user_data = user_data($session_user_id,'full_name','username'); 
$rezult =$db->query("SELECT ipadd FROM users WHERE user_id=".$_SESSION['UserId'].""); 
while($rez = $rezult->fetch_assoc()){ 
    if ($rez['ipadd']==$_SERVER['REMOTE_ADDR']) { 
    } else { 
    echo '<meta http-equiv="refresh" content="0; URL=logout2.php">'; 
    } 

} 
} 

동일한 질문을 가진 게시물을 살펴 보았지만 동일한 문제가 계속 발생하려고 시도했습니다. 모든 조언은 극도로 감사하게 될 것입니다!

if(!isset($_SESSION["session_name"])){ 
    header("Location: somewhere_mainpage.php"); 
} 

모든 페이지가이 라인을 가지고 있는지 확인하는 것이 좋습니다 :

답변

-1

를 시작해야하고, 클라이언트 쿠키 필요가 어떠했는지 확실하지 않다 오류가 발생할 경우 모든 옵션을 수동으로 처리하십시오.

당신과 PHP에서 쿠키를 파괴 할 수있다 :

setcookie(session_name(), '', time() - 3600, $cookie_path, $cookie_domain, $cookie_secure, $cookie_httponly); 


<?php 
$cookie_path = "..."; 
$cookie_domain = "..."; 
$cookie_secure = "..."; 
$cookie_httponly = "..."; 

session_start(); 
session_unset(); 
session_destroy(); 
setcookie(session_name(), '', time() - 3600, $cookie_path, $cookie_domain,$cookie_secure, $cookie_httponly); 
header("Location: ../index.php"); 
exit(); 

time() - 3600은 유효하지 않게 현재 시간 전에 쿠키 만료한다.

조사 할 또 다른 옵션은 로그 아웃 페이지에 session_regenerate_id()입니다. 일부 참조 페이지는 다음과 같습니다 :

php.net - session-regenerate-id

https://stackoverflow.com/a/22965580/1246494

0

나는이 라인을 가지고 있어야 당신의 index.php 파일에서 생각합니다. 이 줄은 세션이 시작되지 않은 경우 다른 페이지로 헤더를 보냅니다.

0

http://php.net/manual/en/function.session-destroy.php 참고 : 일반적인 코드에서 session_destroy()를 호출 할 필요가 없습니다. 세션 데이터를 파기하는 대신 $ _SESSION 배열을 정리하십시오.

그래서 $ _SESSION = null이 필요하며 로그 아웃해야합니다.

0
<?php 
session_unset(); 
session_destroy(); 
header("Location: ../index.php"); 
?> 

작동합니다, 그렇지 않으면 당신은 (당신이 단지로 세션 시도 값

<?php 
unset($_SESSION['UserId']); // Unsets the UserId Variable reuse for each variable 
session_destroy(); 
header("Location: ../index.php"); 
?> 

설정을 해제 할 수)?

또한 내가, 당신은으로 session_start()를 세션을 닫을 때, 메모리에서 만 그것은 내가 항상 서버 세션을 파괴 좋아하는 세션

0

나는 사용자 로그인 데이터가 올 때 session_start(); 함수 호출 로그인 페이지에 있어야한다고 생각하고 로그 아웃 PHP 코드에서, 당신은 설정해야합니다

session_destroy(); 또는 unset($_SESSION['UserId'];

로그 아웃.ph :

<?php 
    session_destroy(); 
    /* * OR * */ 
    //unset($_SESSION['UserId']; 
    header("Location: ../index.php"); 
    exit(); 
    ?> 
+1

동의합니다. 'session_start();'는 모든 페이지에 있어야합니다. 나는'login.php'가 부분 코드처럼 보이기 때문에 OP가 있다고 가정 할 수 있습니다. – Bradmage