今天完成了注册以及登陆的功能。
首先,设置了GeneralFilter,使任何访问的请求都经过它,目前只查询是否带有含登陆ID的cookie以识别登陆用户。未来这里必然还有其他应用;
然后,被cookie的问题所困扰了好一会儿。设置了cookie,并且将setMaxAge(6000),按理说应该能够在客户端保留100分钟啊,为什么关闭并重开一个页面后,GeneralFilter无法找到cookie呢?经过Fiddler跟踪HTTP状态,发现压根就没cookie被写入客户端!这才发现原来在登陆页面的servlet判断字符相等时用了个"==",大汗。。。
在研究session的时候,发现<c:url>的作用原来还有加上JSessionID。
好了,难点来了。
需要保留进入注册或者登陆页面前的最后一个页面,以便登陆或者注册成功后返回这个页面。
前两天用了这样的方式,在最后那个页面上通往登陆或者注册页面的链接上带上本页面的URL。进而发现这样整个original URL就出现在地址栏了,颇为不爽。因此改成了用filter去读取任何到登陆或者注册页面的请求Http头中的Referer,并将其作为request的attribute传递给jsp,jsp中用一个hidden元素保存,以便提交时重定位到original页面。
这时又出现一个问题,如果是从登陆页面再次回到登陆页面呢?完全有可能,例如,当登录信息不正确时,重新回到登录页面提示用户。这里就做了一个小技巧,在LoginServlet和RegisterServlet处理登陆或者注册form提交请求时,如果失败,需要返回原页面,就将original URL作为session的一个attribute保存,那么在jsp中为hidden元素赋值时,就进行判断:优先考虑session中original URL。一切OK。
在写上面这段文字时,忽然发现Taobao也是将original URL加在地址栏的后面,难道我想的太多了,洁癖?
首先,设置了GeneralFilter,使任何访问的请求都经过它,目前只查询是否带有含登陆ID的cookie以识别登陆用户。未来这里必然还有其他应用;
然后,被cookie的问题所困扰了好一会儿。设置了cookie,并且将setMaxAge(6000),按理说应该能够在客户端保留100分钟啊,为什么关闭并重开一个页面后,GeneralFilter无法找到cookie呢?经过Fiddler跟踪HTTP状态,发现压根就没cookie被写入客户端!这才发现原来在登陆页面的servlet判断字符相等时用了个"==",大汗。。。
在研究session的时候,发现<c:url>的作用原来还有加上JSessionID。
好了,难点来了。
需要保留进入注册或者登陆页面前的最后一个页面,以便登陆或者注册成功后返回这个页面。
前两天用了这样的方式,在最后那个页面上通往登陆或者注册页面的链接上带上本页面的URL。进而发现这样整个original URL就出现在地址栏了,颇为不爽。因此改成了用filter去读取任何到登陆或者注册页面的请求Http头中的Referer,并将其作为request的attribute传递给jsp,jsp中用一个hidden元素保存,以便提交时重定位到original页面。
这时又出现一个问题,如果是从登陆页面再次回到登陆页面呢?完全有可能,例如,当登录信息不正确时,重新回到登录页面提示用户。这里就做了一个小技巧,在LoginServlet和RegisterServlet处理登陆或者注册form提交请求时,如果失败,需要返回原页面,就将original URL作为session的一个attribute保存,那么在jsp中为hidden元素赋值时,就进行判断:优先考虑session中original URL。一切OK。
在写上面这段文字时,忽然发现Taobao也是将original URL加在地址栏的后面,难道我想的太多了,洁癖?