我用如下代码实现验证登录session_start();
if(!isset($_SESSION['uid'])){
header("Location:login.htm");
exit();
}login页面的后台代码是这样的if($name=="name" && $pwd=="pwd"){
session_start();
$_SESSION['uid']=$name;
header("Location:test.php");
exit;
}
echo "用户名密码错";每次我关闭浏览器后过一会重新登录,发现根本不需要登录
我希望实现只要关闭浏览器再打开网页就必须重新登录,不管关闭多长时间
搜索了一下,大概是说把php.ini里面session.gc_maxlifetime改小一点就可以,我改成5重启后,关闭浏览器等了十几分钟还是自动登录了,根本没有让输用户名和密码,为什么?
另外session.gc_maxlifetime时间是从什么时候开始计算的?从我打开网页还是从我关闭网页?

解决方案 »

  1.   

    window.onbeforeunload(){ session_destroy();  };  //判断浏览器是否关闭,关闭则清除session
      

  2.   

    首先申明,本人也是刚刚接触PHP的小白。
    不太明白楼主$_SESSION['uid']是什么意思,对Session的了解也只是知道这个每次用session_start();session_id();会生成一个ID,关闭浏览器再打开ID会变。楼主何不试试Cookie方式呢?
    https://bitbucket.org/snippets/Darkwish/K8qbp
    这个是我今天用Cookie写的登录验证,Cookie是写进内存里的,因此关闭浏览器会自动释放Cookie
      

  3.   

    首先申明,本人也是刚刚接触PHP的小白。
    不太明白楼主$_SESSION['uid']是什么意思,对Session的了解也只是知道这个每次用session_start();session_id();会生成一个ID,关闭浏览器再打开ID会变。楼主何不试试Cookie方式呢?
    https://bitbucket.org/snippets/Darkwish/K8qbp
    这个是我今天用Cookie写的登录验证,Cookie是写进内存里的,因此关闭浏览器会自动释放Cookie!
      

  4.   

    $_SESSION['uid']是我自己设置的,我把login界面的登录用户名保存在$_SESSION['uid']里,这样我在页面里判断$_SESSION['uid']是否为空就知道用户登录没有了。这是原本的目的
      

  5.   

    将 php.ini 中的session.cookie_lifetime 设置为0
    把session.gc_maxlifetime的值改回去吧。重启apache 之后再试试看
      

  6.   

    window.onbeforeunload(){ session_destroy();  };  //判断浏览器是否关闭,关闭则清除session感觉这个方法思路应该可以,window.onbeforeunload是js的基础事件,在页面刷新或者关闭时调用(但你只想关闭时调用又有点不太合适);而且直接调用session_destroy()应该没有用,这个方法是php的方法,应该无法在js中执行,要不试试,关闭时发起一个ajax请求,去php端调用这个方法,清掉session
      

  7.   

    我想你一定没用var_dump去调试程序,合理使用打印函数可以快速找到问题。后边接一个die();让你程序出问题,我毙了你。O(∩_∩)O哈哈~
      

  8.   

    楼主解决了没有.直接可以在php代码上优化解决,不用改其它ini配置.每次关闭浏览器就会执行登录提示.
      

  9.   

    我也是这么写的确实是每次关闭浏览器之后需要重新登录你的问题应该出在调试用的浏览器身上,试一下firefox chrome之类的W3C标准的浏览器 尽量避免IE等封闭标准的浏览器
      

  10.   

    session_start();session_unset();试试
      

  11.   

    登录处理的时候先清掉原先的session
      

  12.   

    版主说的是对的。
    session.gc_maxlifetime虽然表示session文件的过期时间,但是并不是说一旦过期立马删除。这取决于session的垃圾回收器的触发机制,即session.gc_disvisor和session.gc_probability, 后者/前者为触发的概率 如1/100 则表示用户操作100次session,会有1次机会启动垃圾回收器。
    正确方法是 session.Cookie_lifetime设置为0,表示客户端存贮SessionID的Cookie为会话Cookie.浏览器关闭时,Cookie值注销.
    配置完成后重启apache,如果已经登陆了,那么手动删除浏览器Cookie和服务器的session。
    session_start();
    $_SESSION = array();//将session文件里的数据清空
    setcookie( session_name(),'',time()-10); //也可以到浏览器找到cookie选项手动删除
    session_destory();//删除session文件
    清理完之后将会有楼主满意的效果。