Rails中的SessionStore
发布:张逸 | 发布时间: 2010年7月23日最近用Rails(版本为2.3.5,ruby版本为1.8.6),需要使用Session。考虑可伸缩性的问题,应该将Session存储在数据库中。我使用的数据库为MySQL 5.0。Rails默认的SessionStore为文件,因此需要修改config下environment.rb的设置,即设置为:
config.action_controller.session_store = :active_record_store
谁知道设置好session_store后,网页(我使用的浏览器为Firefox)竟然无法打开,显示如下:
我明白这是Session的问题,但检查了数据库中的Session表以及Rails中对Session的配置,都没有任何问题。通过检查日志,发现如下错误提示:
Status: 500 Internal Server Error
Mysql::Error: Data too long for column 'session_id' at row 1:
INSERT INTO `sessions` (`updated_at`, `session_id`, `data`, `created_at`)
VALUES('2010-07-23 01:17:05', 'BAh7CDoPc2Vzc2lvbl9pZCIlMDNlNTg0ZDg2NjJkZmFjZT
diMjUwN2ExNmYyNGNjNjAiCmZsYXNoSUM6J0FjdG
lvbkNvbnRyb2xsZXI6OkZsYXNoOjpGbGFzaEhhc2h7A
AY6CkB1c2VkewA6EF9jc3JmX3Rva2VuIjFWNStxMUc
4bThmUmJHQ3VHRGQ3Q2RJR2p1aStUejdtRmRtc
0xJY1RIOUNrPQ==--6f29ea421cd0f14d5e8de7093
5515c26021c254f', 'BAh7AA==\n', '2010-07-23 01:17:05')
问题的症结显然并非配置的问题,而是插入的session_id太大。我检查了Sessions数据表的Column,发现其定义如下:
可是,我在enviroment.rb中,设置了Session的secret,如下:
config.action_controller.session = {
:key => '_session',
:secret => 'f914e9b1bbdb829688de8512f5fea7d8e83fb35b
fe2b56bcf1e6438d1d1b7837c532f8c2ece2a2
d0e37812e9b210824089b1810a4e238a61dfd922dc9dd62521'
}
即使将secret设置为更短的值同样如此。
最后,我终于找到了答案,真是啼笑皆非。很简单的办法,那就是清除掉浏览器中Cookie的值。一切Ok。现在,查看sessions表,则session_id的值为:
session_id的长度变得正常了。系统同样恢复正常。这真的是一个容易忽视的陷阱。留此存照!
- 相关文章:
RadRails插件在MyEclipse的安装 (2010-6-10 9:25:18)
发表评论
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。






张逸(Bruce Zhang)
