关于Session持久化到数据库中的问题

LinusLan 2011-07-09 01:56:15
最近在看孙卫琴的那本《Tomcat与JavaWeb开发技术详解第2版》,看到第9章的时候,有个用JDBCStore将Session持久化到数据库中的知识,我试了一下,例子不报错,但是就是一直在数据库中找不到被持久化的Session ID,在网上找了这个问题的答案,很少,也解决不了,希望在这里能得到答案,以下是我的代码:

环境是在tomcat6.0下的

META-INF中的context.xml的配置如下

<Context reloadable="true">
<Manager className="org.apache.catalina.session.PersistentManager"
saveOnRestart="true"
maxActiveSessions="10"
minIdleSwap="60"
maxIdleSwap="120"
maxIdleBackup="180"
maxInactiveInterval="300">

<Store className="org.apache.catalina.session.JDBCStore"
driverName="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost/tomcatsessionDB?user=root&password=spoto"
sessionTable="tomcat_sessions"
sessionIdCol="session_id"
sessionDataCol="session_data"
sessionValidCol="valid_session"
sessionMaxInactiveCol="max_inactive"
sessionLastAccessedCol="last_access"
sessionAppCol="app_name"
checkInterval="60" />

</Manager>
</Context>

下面是我的MySQL数据库的表:

create table tomcat_sessions (
session_id varchar(100) not null primary key,
valid_session char(1) not null,
max_inactive int not null,
last_access bigint not null,
app_name varchar(255),
session_data mediumblob,
KEY kapp_name(app_name)
);

本来想插入图片的,不过不懂插。。。所以只能辛苦各位了。这个问题,无关知识点的轻重,只是一直没跑通例子,觉的心里有块石头没落下,在此非常希望有人能解决这个问题,谢谢。

...全文
240 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
LinusLan 2011-07-13
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 stl0 的回复:]
session存到数据库是一种可行的方法,但是每次连接数据库会很耗时,也有一种考虑直接保存到服务器的内存里。这样存取都要快的多
[/Quote]
保存到服务器,虽然快,但是网站的访问一多的话,内存消耗就会变的非常大(像门户网站)。呵呵。不知道你有没有实现过session数据库的持久化?有没有成功过哦?我一直不成功,一个石头老卡着。如果有的话,还请告诉我,大恩大德,感激不尽。
xiaocao081113 2011-07-12
  • 打赏
  • 举报
回复
路过 学习一下
LinusLan 2011-07-12
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 bao110908 的回复:]
JDBC 驱动放到 tomcat 的 lib 目录下了么?

connectionURL="jdbc:mysql://localhost/tomcatsessionDB?user=root&amp;password=spoto"

你的 mysql 用的是 80 端口么?
[/Quote]

不好意思呀,最近上网不方便,所以这几天少来csdn了,我的mysql是3306端口。驱动什么的都放到lib目录下了,我的web应用的lib目录和tomcat的lib目录都放了。
莫欺少年穷 2011-07-12
  • 打赏
  • 举报
回复



这个没有深入,session不是打开的网页不关闭就一直存在么?
stl0 2011-07-12
  • 打赏
  • 举报
回复
session存到数据库是一种可行的方法,但是每次连接数据库会很耗时,也有一种考虑直接保存到服务器的内存里。这样存取都要快的多
LinusLan 2011-07-12
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 xwin1989 的回复:]
一般使用SSH 直接就Hibernate 了。。 没有多少注意这个session的ID 。。

应该是隐藏的吧 每个用户断开连接后 session就没了 你也不好获取吧》
[/Quote]

用户断开连接之后,会话自然就结束了,但是如果是应用重启,而用户在感官上觉的他并没有断开连接,那么他所做的操作,应该还存在,如购物车内的内容应该还存在在购物车中,如果web应用重启,而session不能进行保存,那么用户所做的操作就没有了,用户并不管web应用是不是重启了,他就只认为,这个网站不好用。对吧?所以我们在一些特殊的情况下,应该让session持久化,再在用户继续操作的时候重新获得session。而持久化到数据库就是一种方法,只是这种方法我试验的不成功。唉。。。
Xwin1989 2011-07-12
  • 打赏
  • 举报
回复
一般使用SSH 直接就Hibernate 了。。 没有多少注意这个session的ID 。。

应该是隐藏的吧 每个用户断开连接后 session就没了 你也不好获取吧》
xinxin1018639293 2011-07-12
  • 打赏
  • 举报
回复
怎样让session永远都不实效呀?
  • 打赏
  • 举报
回复
JDBC 驱动放到 tomcat 的 lib 目录下了么?

connectionURL="jdbc:mysql://localhost/tomcatsessionDB?user=root&password=spoto"

你的 mysql 用的是 80 端口么?
LinusLan 2011-07-10
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 bao110908 的回复:]

小弟能力有限,无法回答“哥”的问题。
[/Quote]
杯具了。。。平时说话聊天习惯了。。。不好意思呀。。。小弟求教。
  • 打赏
  • 举报
回复
小弟能力有限,无法回答“哥”的问题。
LinusLan 2011-07-10
  • 打赏
  • 举报
回复
帖子不要沉呀!!!哥想知道答案!!!!!
LinusLan 2011-07-10
  • 打赏
  • 举报
回复
帖子沉了。。。沉了。。。沉了。。。。沉。。了。。我真的很想知道答案呀。。。没人研究过吗?
hepeng_8 2011-07-09
  • 打赏
  • 举报
回复
不好意思,没研究过这个,路过了!!!
LinusLan 2011-07-09
  • 打赏
  • 举报
回复
怎么没人回答。。。

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧