Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Session 关闭浏览器时销毁CakePHP会话_Session_Cakephp_Browser - Fatal编程技术网

Session 关闭浏览器时销毁CakePHP会话

Session 关闭浏览器时销毁CakePHP会话,session,cakephp,browser,Session,Cakephp,Browser,出于Ajax原因,我需要将Security.level设置为中等。 但我希望,如果用户关闭浏览器,他的会话将被破坏。 我该怎么做 提前谢谢 除非您要持久化会话数据(即:将会话数据存储在将来到期的cookie中),否则当用户关闭浏览器时,会话应该被销毁 不幸的是,我不熟悉CakePHP框架,因此无法对其API发表评论。但是,如果要显式结束会话,可以在PHP中使用session\u destroy() 希望能有所帮助。我想你可以在页面卸载时启动ajax命令来调用session_destroy()你可

出于Ajax原因,我需要将Security.level设置为中等。 但我希望,如果用户关闭浏览器,他的会话将被破坏。 我该怎么做


提前谢谢

除非您要持久化会话数据(即:将会话数据存储在将来到期的cookie中),否则当用户关闭浏览器时,会话应该被销毁

不幸的是,我不熟悉CakePHP框架,因此无法对其API发表评论。但是,如果要显式结束会话,可以在PHP中使用
session\u destroy()


希望能有所帮助。

我想你可以在页面卸载时启动ajax命令来调用session_destroy()

你可以在页面关闭时用JS删除会话cookie(记住:当用户刚刚离开时也会触发页面关闭,可能只是导航到你的下一页)。

对于CakePHP,是的,CakePHP确实设置了一个适当的会话cookie,浏览器关闭时会删除该cookie

你真正关心的可能是会话劫持,所以你真的想在网站关闭时注销。你不能这样做-我所知道的最好的替代方法是:

  • 带有“你在吗?”AJAX刷新的短会话超时-现在可以使用
    Configure::write('session.timeout',$seconds)独立于安全级别控制超时,其中对于中等安全级别,超时秒数乘以100。银行使用这种方法
Config/core.php

Configure::write('Session', array(
    'defaults' => 'php',
    'cookieTimeout' => 0,   //Lives until the browser is closed.
    'checkAgent'  => false  //To fix a little the Chrome Frame problem
));

你没有说你是在使用php蛋糕还是数据库会话。如果浏览器崩溃怎么办?我会用另一种方法:每隔几秒钟用ajax发布一个url。如果这种情况不再发生,用户就不再“在网站上”了。这没关系,但如果你告诉他如何销毁它,而不是一开始就暂时销毁它,那就更好了。为什么这只是“可以”呢?我认为这就是解决方案,因为它只会破坏auth cookie,从而破坏会话。手动销毁它需要额外的ajax调用,该调用依赖于JS,而不是每个用户都打开了JS。所以这是不可靠的。Configure::write('Session',array('defaults'=>'php','timeout'=>1440,//会话将在30分钟不活动后超时'cookieTimeout'=>1440,//会话cookie将最多生存24小时,这不会影响会话超时'checkAgent'=>false,//'autoRegenerate'=>false,//导致会话中断在到期时(每次页面加载时重置));//同时注释这一行,它可以完美地“自动重新生成”