php – Zend_Session_SaveHandler_DbTable是否每次刷新都擦除会话?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – Zend_Session_SaveHandler_DbTable是否每次刷新都擦除会话?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3650字,纯文字阅读大概需要6分钟。
内容图文
![php – Zend_Session_SaveHandler_DbTable是否每次刷新都擦除会话?](/upload/InfoBanner/zyjiaocheng/798/26f285e88ff34e98addc6086f4d0c861.jpg)
我基本上遇到了与this question中的海报相同的问题.我的数据库已正确初始化.我已经尝试在application.ini和Bootstrap中初始化数据库和会话SaveHandler.无论我怎么做,结果都一样.
这是application.ini初始化的样子:
resources.db.adapter = "pdo_mysql"
resources.db.params.host = "localhost"
resources.db.params.username = "uname"
resources.db.params.password = "******"
resources.db.params.dbname = "dbname"
resources.session.saveHandler.class = "Zend_Session_SaveHandler_DbTable"
resources.session.saveHandler.options.name = "sessions"
resources.session.saveHandler.options.primary = "sessionID"
resources.session.saveHandler.options.modifiedColumn = "lastModifiedTime"
resources.session.saveHandler.options.dataColumn = "data"
resources.session.saveHandler.options.lifetimeColumn = "lifetime"
以下是Bootstrap初始化的样子:
protected function _initSession() {
$db = Zend_Db::factory('Pdo_Mysql', array(
'host' =>'localhost',
'username' => 'uname',
'password' => '******',
'dbname' => 'dbname'
));
Zend_Db_Table_Abstract::setDefaultAdapter($db);
$sessionConfig = array(
'name' => 'sessions',
'primary' => 'sessionID',
'modifiedColumn' => 'lastModifiedTime',
'dataColumn' => 'data',
'lifetimeColumn' => 'lifetime'
);
$saveHandler = new Zend_Session_SaveHandler_DbTable($sessionConfig);
Zend_Session::setSaveHandler($saveHandler);
Zend_Session::start();
}
我的会话数据库表定义如下:
create table sesssions (
sessionID char(32) primary key not null,
lastModifiedTime timestamp,
lifetime timestamp,
data text
) engine=innodb;
我有一个测试操作,通过一个非常简单的一个字段形式来测试它,只是将其内容转储到Session中.该动作如下所示:
public function addAction()
{
$namespace = new Zend_Session_Namespace();
$form = new Application_Form_AddToSession();
$request = $this->getRequest();
if ($request->isPost()) {
if ($form->isValid($request->getPost())) {
$namespace->content = $request->getParam('toAdd');
}
}
$this->view->form = $form;
}
这是它使用的表单:
class Application_Form_AddToSession extends Zend_Form
{
public function init()
{
$this->setMethod('post');
$this->addElement('text', 'toAdd', array(
'filters' => array('StringTrim', 'StringToLower'),
'validators' => array(
array('StringLength', false, array(0, 256)),
),
'required' => true,
'label' => 'Add:',
));
$this->addElement('submit', 'add', array(
'required' => false,
'ignore' => true,
'label' => 'Add',
));
}
}
视图只显示表单.
为了测试值是否实际进入会话,我使用索引操作.这是有问题的索引操作:
public function indexAction()
{
$namespace = new Zend_Session_Namespace();
echo 'Content: '.$namespace->content.'<br>';
echo '<pre>'; print_r($_SESSION); echo '</pre>';
}
现在.如果我没有配置Session保存配置为使用Zend_Session_SaveHandler_DbTable,即,如果我没有配置会话保存,那么这很好.我在表单字段中输入一个值,转到索引操作并将其输出给我.会话完全按照预期的方式工作.
如果我在application.ini或Bootstrap中配置了Zend_Session_SaveHandler_DbTable,那么当我在测试字段中输入一个值并转到索引操作时,该值就会消失.我的数据库表有一行具有正确的sessionID,sessionID与浏览器中的cookie匹配.但是数据库中没有其他信息. data为NULL,TIMESTAMP字段都清零.
我已经没事了.我把Mysql表作为常规表和InnoDB表.我已经尝试了我可以提出的数据库和会话配置的每个排列,包括将db提供给配置数组,并在Bootstrap中初始化一个,在.ini中初始化一个.我已经搜索了网络和StackOverflow的线索.我见过其他人发布类似的问题,但我发现的答案都没有奏效.我没做什么?我搞砸了什么?我怎样才能使它工作?
解决方法:
问题是您将lastModifiedTime和lifetime列定义为时间戳.它们应该是INT而不是:
CREATE TABLE `sessions` (
`sessionID` char(32) NOT NULL,
`lastModifiedTime` INT,
`lifetime` INT,
`data` text,
PRIMARY KEY (`sessionID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
经过这个小小的修改后它应该可行.
内容总结
以上是互联网集市为您收集整理的php – Zend_Session_SaveHandler_DbTable是否每次刷新都擦除会话?全部内容,希望文章能够帮你解决php – Zend_Session_SaveHandler_DbTable是否每次刷新都擦除会话?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。