2016-04-12 46 views
0

有两个登录页面,如果一个页面被注销,其他人也会自动注销如何更改该页面?如何在不影响其他页面的情况下注销页面?

adminlogout.php

<?php 
    session_start(); 
    unset($_SESSION['ADMIN_UNAME']); 
    session_destroy(); 
    header("location: adminlogin.php?logout=true"); 
?> 

logout.php

<?php 
    session_start(); 
    unset($_SESSION['SESS_MEMBER_ID']); 
    session_destroy(); 
    header("location: login.php"); 
?> 
+1

不使用'session_destroy()' – roullie

+0

正如上面提到的,你正在摧毁整个会话,不这样做,而不是使您希望从中注销的登录无效。 – Epodax

+0

@Epodax除了全局变量,会话还有什么用途。用户注销时是否有必要销毁它们? – user6181297

回答

0

请删除session_destroy()函数。 session_destroy()从服务器中删除具有sessionid请求的完整会话信息。因此这两个脚本注销。

adminlogout.php

<?php 
    session_start(); 
    unset($_SESSION['ADMIN_UNAME']); 
    header("location: adminlogin.php?logout=true"); 
?> 

logout.php

<?php 
    session_start(); 
    unset($_SESSION['SESS_MEMBER_ID']); 
    header("location: login.php"); 
?> 
+0

除了全局变量,会话还有什么用途。用户注销时是否有必要销毁它们? – user6181297

+0

对于来自客户端(浏览器)的特定请求,所有会话数据都存储在文件tmp文件夹下的文件 - sess_XXXXXXXXXXXXXX。当用户注销时只需删除与用户有关的信息。在你的情况下,因为两个单独的登录有adminlogout和注销 –

+0

然后我们不应该破坏tmp文件夹 – user6181297

0

它很明显,如果一个类型的用户注销对方也会因为根据你的代码中被摧毁整个会话两种退出

session_start(); 
    unset($_SESSION['SESS_MEMBER_ID']); 
    session_destroy();//don't use this instead think some other logic suitable for your system 
    header("location: login.php"); 
0

当您使用session_destroy();您c彻底删除服务器了解您当前会话的所有内容。注意,在当前浏览器实例处于打开状态时会话仍然存在,如果销毁会话,则会销毁所有会话全局变量。

如果你想注销只是管理员或普通用户,你应该改变一个会话变量来反映这一点。

0

正如其他人已经指出的,问题是session_destroy()的呼吁,因为这会破坏整个会话。

但我想补充一点,你可能应该考虑在你的会话中使用多维数组以用于不同的目的,甚至更好的是,使用不同的会话,因为它们在完全不同的区域(例如管理会话应该明确不会与普通用户会话共享,使用HTTPS cookie等)。

0

取消设置会话变量或使会话变量为空,在logout.php

adminlogout.php 
    <?php 
     session_start(); 
     $_SESSION['ADMIN_UNAME']=''; 
     header("location: adminlogin.php?logout=true"); 
    ?> 




logout.php 
    <?php 
    session_start(); 
     $_SESSION['SESS_MEMBER_ID']=''; 
     header("Location:login.php"); 

    ?> 
相关问题