问题标签 [zend-session]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
model-view-controller - Zend_Session 和 Zend_Log _Db 每次页面加载都会向数据库写入两次
网上有很多类似问题的例子,但他们的解决方案似乎都没有解决这个特殊的变化。任何建议,将不胜感激。
通常会出现此问题,因为恶意链接导致对 favicon 或 css 文件等资源的请求多次命中调度程序,从而导致多个调度进程,从而导致数据库中的多行。
我已经检查了这个非常简单的示例页面上的所有链接实际上都解析为它们指向的资源。
会话处理程序设置如下:
数据库日志记录设置如下:
这两个对象都已正确设置,并且可以从数据库读取和写入。只有一切都发生了两次。如果我将测试日志消息放在应用程序的任何位置,它将被写入数据库两次。如果我在每次调用索引操作时增加三个变量——一个存储在会话中,一个通过 Zend_Registry 对象传递,另一个在 indexAction 本地传递——只有会话变量增加 2。Apache 访问日志显示正确的数量的请求从页面加载中触发,并且都具有 200 或 304(未更改)的良好响应代码。
我已经尝试禁用所有头部链接。我已经尝试完全禁用布局。我已将所有内容本地化到调度程序并在调度运行之前退出。
在所有情况下,都会发生额外的写入/增量。有什么想法吗?提前感谢您的帮助。
php - 在 destruct 中写入 Zend_Session_Namespace
我注意到使用PHP 5.3__destruct
写入数据时出现了一些稍微出乎意料的行为:Zend_Session_Namespace
析构函数被调用,但数据没有被写入。但是,如果我在对象完成所有必要的操作之后隐式调用 destruct,并在脚本终止之前强制销毁,则数据写得很好,但我宁愿不这样做。
我想它与这个错误有关: http: //bugs.php.net/29032(错误对我来说似乎有点老了),从表面上看,修复看起来不错(将 __destruct 注册为关闭功能,之前调用$_SESSION
的函数不可用),但是析构函数不会被调用两次(一次通过register_shutdown_function
and 自动调用一次?
当然,在关闭时将奇数位对象数据写入会话是已经解决的问题吗?人们在需要时会做什么?
(OSX 10.6.6、Apache 2.2.15 (Unix)、PHP 5.3.3、Zend Framework 1.7.2)
php - Zend_Session_SaveHandler_DbTable 每次刷新都会擦除 Session?
我基本上遇到了与这个问题中的海报相同的问题。我的数据库已正确初始化。我已经尝试application.ini
在Bootstrap
. 不管我怎么做,结果都是一样的。
这是application.ini
初始化的样子:
下面是 Bootstrap 初始化的样子:
我的会话数据库表定义如下:
我有一个测试操作,它通过一个非常简单的字段表单来测试它,该表单只是将其内容转储到会话中。动作如下所示:
这是它使用的形式:
该视图仅显示表单。
为了测试该值是否实际进入会话,我使用 index 操作。这是有问题的索引操作:
现在。如果我没有将会话保存配置为使用Zend_Session_SaveHandler_DbTable
,即,如果我根本没有配置会话保存,那么这可以正常工作。我在表单字段中输入一个值,转到索引操作并将其输出给我。会话完全按照它应该的方式工作。
如果我在 Bootstrap 或 BootstrapZend_Session_SaveHandler_DbTable
中进行了配置application.ini
,那么当我在测试字段中输入一个值并转到索引操作时,该值就消失了。我的数据库表有一行与我的浏览器中的正确sessionID
和sessionID
匹配的 cookie。但是数据库中没有其他信息。 data
是 NULL 并且两个TIMESTAMP
字段都被清零。
我已经没有东西可以尝试了。我将 Mysql 表作为常规表和 InnoDB 表。我已经尝试了所有我能想到的数据库和会话配置的排列,包括将 db 提供给配置数组,并在 Bootstrap 中初始化一个,在.ini
. 我已经搜索了网络和 StackOverflow 以寻找线索。我见过其他人发布过类似的问题,但我找到的答案都没有奏效。我没做什么?我搞砸了什么?我怎样才能让它工作?
php - 在 Zend Framework 中引导和访问会话变量
通过 ZF 中的不同操作访问会话变量时遇到问题。
以下是引导程序的内容:
我在 IndexController 中为 $sessionUser 分配了一个变量:
并尝试访问管理员控制器中的变量:
然而我收到错误:
以及可能导致这种情况的想法?
非常感谢
zend-framework - 如何使用会话填充 zend 表单字段?
我正在使用会话在 Zend 应用程序中填充带有选项的多选框。
用户选择一个或多个选项并填写表单上的其他字段,然后提交。如果用户没有选择多选中的所有选项,则再次显示表单,但多选仅具有用户上次未选择的选项。此过程继续进行,直到多选中没有更多选项可供处理。
这是我用来摆脱已经处理的选项的代码,以便它们不用于填充多选框:
print_r($keyword_names);
显示正确的选项,但是当用户提交时加载表单时,多选显示从一开始就存在的选项,即用户刚刚选择并提交的选项没有从多选中取出,它是只有当用户再次提交表单时,多选框才会更新。
感谢帮助。
php - Zend Framework - Zend_Session 奇怪的行为
我只是按照网站上的官方文档学习 Zend Framework。
但是我遇到了 Zend_Session 的一个奇怪行为:当用户通过身份验证时,浏览应用程序页面 - 一切正常,但如果他快速刷新浏览器页面(按 F5 或工具栏中的按钮)或者即使一些 AJAX php 文件(使用会话)被多次请求,-会话突然过期(用户未经身份验证,但 cookie 过期日期相同)。
不过,我没有在我的应用程序中使用 ACL 和 MVC 结构。
所以它可以工作并且非常简单,但是当页面快速刷新时会失败。我也不知道为什么,但是会/home/user/sessions/
为用户访问的每个页面创建一个单独的 cookie 文件。
这里有一个类似的问题, zend session 在多次刷新时过期, 但提供的解决方案对我没有帮助:(
zend-framework - 如何结合 Zend_Session 和 Zend_Oauth
我遇到了 Zend_Auth 和 Zend_Session 的问题。我最近将我的引导文件分解为模块化引导程序。从那时起,每当我使用 Zend_Auth 登录时,我都会收到会话已经启动的错误消息。所以我将 Zend_Auth 命名空间更改为“DC_Auth”。现在我遇到了几个错误。
它无法找到的代理文件(适用于 Doctrine 2)实际上位于 application/proxies/User_Model_ProfileProxy.php。
如果您需要更多信息,请告诉我,我在这方面玩得很开心。
编辑:额外注意,我可以通过在 index.php 中运行引导程序之前放置 Zend_Session::start() 来停止 zend 会话问题。但是如果我这样做,会话在我的用户模块对象加载之前启动,所以 Zend_Auth 身份最终成为 PHP_Incomplete_Object。
谢谢
zend-framework - zend session table, how to save user_id beside the standart stuff?
i am using http://framework.zend.com/manual/en/zend.session.savehandler.dbtable.html,
the problem is that when i delete a user i want to delete his session in order to log him out, but i don't know what his session is...
I can't find a way to add a custom column to the zend session table options so that it would save the user's id
zend-framework - 从 Zend_Session_Namespace 读取时包括所有类?
我的会话中有两个命名空间:“全局”和“用户”
在“全局”中只有一些设置,在“用户”中我有一个序列化的用户对象,我猜它是正确保存的:(这是来自会话文件)
全球|a:16:{ [...] s:12:"last_request";i:1301390173; [...] }
用户|a:1:{ s:10:"userObject";O:16:"currentUserModel":24:{ [...] s:10:"*_roleId";s:7:"premium"; [...] } }
当我这样做时:
$sess = new Zend_Session_Namespace('global');
我收到一个关于包含我不想要的“currentUserModel.php”的错误,因为此时我不需要用户对象 - 我要做的就是获取我的“全局”命名空间。
现在的问题是:我是否必须包含存储在所有命名空间中的所有对象的所有类,或者是否可以只包含我正在访问的命名空间中的对象的类?
提前致谢
php - PHPUnit 输出导致 Zend_Session 异常
我收到了许多与此完全相同的错误:
运行我的应用程序的测试套件时。这适用于 PHPUnit 3.5.10 和 PHP 5.3.5。
没有导致这种情况的神秘、意外的空白输出。我已经确定“发送到浏览器的输出”是正在执行的 PHPUnit 测试的实际输出。如果我打开 PHPUnit/Util/Printer.php 并print $buffer
用if (strpos($buffer, 'PHPUnit 3.5.10 by Sebastian Bergmann') === false)
(有效地停止 PHPUnit 的第一行输出)换行,那么我的第一个测试成功(直到测试用例输出一个点表示测试成功,然后下一个测试失败,因为点已输出)。
我团队中的另一位开发人员能够成功运行完整的测试套件,所以我知道这不是应用程序代码的问题。一定是我的本地环境的一些配置设置或问题。
我已经检查了 php.ini 以验证它output_buffering
是否已打开和implicit_flush
关闭,并且它们是。
我也尝试添加Zend_Session::$_unitTestEnabled = true;
到我的测试引导程序中,但这并没有帮助(无论如何也不应该有必要,因为它可以在另一个开发人员的机器上以及没有它的情况下在我们的 CI 服务器上工作)。
除了忽略错误之外还有什么建议吗?我从来没有见过这样的事情,我真的很茫然。
谢谢!
更新:
为了尝试进一步隔离问题,我通过执行以下测试脚本将 ZF 和我的应用程序排除在外:
测试失败:
但是,完全相同的测试可以在朋友的机器上运行。相同版本的 PHP 和 PHPUnit。