验证登录的时候,如何实现浏览器关闭再打开必须重新登录

ydy4618 2015-12-21 10:20:40
我用如下代码实现验证登录

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时间是从什么时候开始计算的?从我打开网页还是从我关闭网页?
...全文
3165 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
yt_php 2019-01-05
  • 打赏
  • 举报
回复
版主说的是对的。 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文件 清理完之后将会有楼主满意的效果。
水惊鱼 2019-01-04
  • 打赏
  • 举报
回复
登录处理的时候先清掉原先的session
水惊鱼 2019-01-04
  • 打赏
  • 举报
回复
session_start();

session_unset();

试试
connect_ 2018-12-27
  • 打赏
  • 举报
回复
我也是这么写的确实是每次关闭浏览器之后需要重新登录

你的问题应该出在调试用的浏览器身上,试一下firefox chrome之类的W3C标准的浏览器 尽量避免IE等封闭标准的浏览器
金钱至尚 2018-12-14
  • 打赏
  • 举报
回复
楼主解决了没有.直接可以在php代码上优化解决,不用改其它ini配置.每次关闭浏览器就会执行登录提示.
gxjy945 2016-01-08
  • 打赏
  • 举报
回复
window.onbeforeunload(){ session_destroy(); }; //判断浏览器是否关闭,关闭则清除session 感觉这个方法思路应该可以,window.onbeforeunload是js的基础事件,在页面刷新或者关闭时调用(但你只想关闭时调用又有点不太合适);而且直接调用session_destroy()应该没有用,这个方法是php的方法,应该无法在js中执行,要不试试,关闭时发起一个ajax请求,去php端调用这个方法,清掉session
大G和弦 2016-01-08
  • 打赏
  • 举报
回复
我想你一定没用var_dump去调试程序,合理使用打印函数可以快速找到问题。后边接一个die();让你程序出问题,我毙了你。O(∩_∩)O哈哈~
qq_33555300 2016-01-07
  • 打赏
  • 举报
回复
你是不是把你自己浏览器对这个页面的密码设为保存了,你可以看看是不是你浏览器密码的保存问题
ydy4618 2015-12-27
  • 打赏
  • 举报
回复
引用 8 楼 jordan102 的回复:
将 php.ini 中的session.cookie_lifetime 设置为0 把session.gc_maxlifetime的值改回去吧。 重启apache 之后再试试看
试了,没什么效果啊,还是自动就登陆了
一起混吧 2015-12-24
  • 打赏
  • 举报
回复
将 php.ini 中的session.cookie_lifetime 设置为0 把session.gc_maxlifetime的值改回去吧。 重启apache 之后再试试看
ydy4618 2015-12-23
  • 打赏
  • 举报
回复
引用 5 楼 DAGiGi 的回复:
首先申明,本人也是刚刚接触PHP的小白。 不太明白楼主$_SESSION['uid']是什么意思,对Session的了解也只是知道这个每次用session_start();session_id();会生成一个ID,关闭浏览器再打开ID会变。 楼主何不试试Cookie方式呢? https://bitbucket.org/snippets/Darkwish/K8qbp 这个是我今天用Cookie写的登录验证,Cookie是写进内存里的,因此关闭浏览器会自动释放Cookie
$_SESSION['uid']是我自己设置的,我把login界面的登录用户名保存在$_SESSION['uid']里,这样我在页面里判断$_SESSION['uid']是否为空就知道用户登录没有了。这是原本的目的
DAGiGi 2015-12-23
  • 打赏
  • 举报
回复
首先申明,本人也是刚刚接触PHP的小白。 不太明白楼主$_SESSION['uid']是什么意思,对Session的了解也只是知道这个每次用session_start();session_id();会生成一个ID,关闭浏览器再打开ID会变。 楼主何不试试Cookie方式呢? https://bitbucket.org/snippets/Darkwish/K8qbp 这个是我今天用Cookie写的登录验证,Cookie是写进内存里的,因此关闭浏览器会自动释放Cookie!
DAGiGi 2015-12-23
  • 打赏
  • 举报
回复
首先申明,本人也是刚刚接触PHP的小白。 不太明白楼主$_SESSION['uid']是什么意思,对Session的了解也只是知道这个每次用session_start();session_id();会生成一个ID,关闭浏览器再打开ID会变。 楼主何不试试Cookie方式呢? https://bitbucket.org/snippets/Darkwish/K8qbp 这个是我今天用Cookie写的登录验证,Cookie是写进内存里的,因此关闭浏览器会自动释放Cookie
ydy4618 2015-12-23
  • 打赏
  • 举报
回复
有没有人帮我回答啊
ydy4618 2015-12-23
  • 打赏
  • 举报
回复
有没有人帮我回答啊
ydy4618 2015-12-22
  • 打赏
  • 举报
回复
引用 1 楼 qq_33460195 的回复:
window.onbeforeunload(){ session_destroy(); }; //判断浏览器是否关闭,关闭则清除session
请问这行代码应该加在哪儿?
huaise2016 2015-12-21
  • 打赏
  • 举报
回复
window.onbeforeunload(){ session_destroy(); }; //判断浏览器是否关闭,关闭则清除session

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧