锁定老帖子 主题:开源Java Web架构 有源码
该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2010-10-09
SessionService.java:
public Map getSession(String id) { MemCachedClient mc = this.getMemCachedClient(); Map session = (Map) mc.get(id); if (session == null) { session = new HashMap(); mc.add(id, session); } return session; } 这只是获取session,如果session不存在,大可只返回空的hashMap,没有必要再mc.add(id, session);因为一旦你返回的hashMap中放入值的时候会自动调用saveSession,如果没有如果在获取session时发现没有session,将新建hashMap存入实际上没有任何意义还会浪费一次网络通信流量。因为你存入的空的session要么下次取还是取一个空hashMap回来,要么就会被一个新的有值的hashMap代替。总之第一次存入的空hashMap无用。这是我的见解! |
|
返回顶楼 | |
发表时间:2010-10-09
还有一个问题是UUID作为cookie的防攻击性如何?
根据你提供的程序,如果我自己伪造一个类似的UUID的cookie传入系统,系统发现这个cookie系统中没有相应的session,则系统会对应这个cookie值(自己伪造的UUID)建立session,这样做有没有什么后果?如果我自己只创建一个长度为10或者更短的,系统也接受? 我的做法是: 1、在用户登录前获取时创建临时session,在只读取的情况下,不写入memcached,如果有临时信息写入才写入memcached.此时的sid(SessionID有可能是用户自己伪造传入的). 2、在用户登录过后重新生成新的UUID(ticket),使原来的cookie失效,产生新的cookie写回客户端,可以防止用户自己伪造UUID(cookie)。 3、此时如果用户再次伪造一个UUID cookie过来,系统会发现此UUID cookie在memcached中不存在,则会重复1、2两个步骤直至用户使用了系统分配的UUID。 |
|
返回顶楼 | |