Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.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
Php Zend Framework 2 SessionManager、SessionArrayStorage和';到期日';功能_Php_Zend Framework2 - Fatal编程技术网

Php Zend Framework 2 SessionManager、SessionArrayStorage和';到期日';功能

Php Zend Framework 2 SessionManager、SessionArrayStorage和';到期日';功能,php,zend-framework2,Php,Zend Framework2,我的问题是关于Zend 2 SessionStorage用于容器的过期元数据密钥 是否有任何功能负责清理过期的容器,或者我应该只实现一个?我知道这很容易做到,我只是想知道我是否错过了什么 为了澄清,我们有来自Csrf验证器的sec_令牌,它存储在容器中的会话中。它有过期的时间戳im metedata密钥,我们有这个带有csrf哈希的容器 经过一番挖掘,我找不到任何内置函数或行为可以自动清除过期容器中的会话存储。我们必须实现这个行为,否则我会丢失一些东西?您要查找的代码位于Zend\Sessio

我的问题是关于Zend 2 SessionStorage用于容器的过期元数据密钥

是否有任何功能负责清理过期的容器,或者我应该只实现一个?我知道这很容易做到,我只是想知道我是否错过了什么

为了澄清,我们有来自Csrf验证器的sec_令牌,它存储在容器中的会话中。它有过期的时间戳im metedata密钥,我们有这个带有csrf哈希的容器


经过一番挖掘,我找不到任何内置函数或行为可以自动清除过期容器中的会话存储。我们必须实现这个行为,否则我会丢失一些东西?

您要查找的代码位于Zend\Session\AbstractContainer.php中
在方法ExpireByExpirTime中。它在同一个文件的expireKeys()中调用,并在每次尝试访问它时清除所有过期的密钥。

我也发现了这一点,但我不喜欢“每次尝试访问它”部分。我认为如果可以自动从会话存储中清除它会更好。主要是因为经过一段时间的使用特定的存储,我们将有大量的数据。zend能够知道哪一个元数据密钥过期了,这很好,但如果我只需要一次容器,就不再使用它了呢?只要未为用户清除会话,它将保留在存储器中?如果有人使用“记住我”选项登录,则此过期容器仍将在会话存储中。这样可以吗?存储中存在一些过时的数据这一事实并不有害,因为您无论如何都不会访问它。当你这么做的时候,它就消失了。我看不出这有什么问题。让我考虑一下我的例子。我有带Csrf令牌的表格。现在让我们假设有人在不同的窗口中打开相同的表单5次。每次表单都有另一个csrf哈希权限。我将其存储在会话中进行验证。在zend中,我为Csrf容器名添加了salt,这是随机生成的,因为如果不是,另一个将打开的相同表单将覆盖上一个相同表单的哈希,现在我有了5个不同容器的会话存储,这些容器对打开5次的表单进行了哈希。我的会话存储会因为这种行为而增长吗?也许我错过了什么,这很好?它只会存储上次打开的表单的csrf令牌。前4个表单的CSRF令牌将被删除,如果用户试图提交其中任何一个表单,将被拒绝,因为CSRF令牌无效。@您完全正确。我想自己了解一下它是如何工作的,我在Form/Elements/Csrf中找到了prepare函数,它每次都会生成新的令牌。有时候我只是想知道桌子底下到底发生了什么。(请回答;)