这一篇博客来讲解下babasport这个项目中使用的Login功能, 当然这里说的只是其中的一些简单的部分, 记录在此 方便以后查阅.
首先我们登录需要注意的事项是, 当用户点击登录按钮时,转入登錄页面时也要记住之前用户是从哪个页面发送请求过来的, 这样登录成功后还能继续跳回到用户之前浏览的那个页面.
我们页面展示显示的登錄按钮都是集成在一个common的jsp中, 前台每个页面都是引用的这个jsp, 所以需要在这个common的jsp中直接添加点击登录按钮跳转的页面.
js自带的转义类, 转义的好处昰能够在url中带中文重定向后无法接收 且url带多参数解决&被转义而无效的情况.
到了登录界面后, 查看登陆界面图, 这里的url参数是经过转义的:
12 //执行登錄操作 16 //1: 判断用户名不能为空 18 //2:判断密码不能为空 27 //6:回跳之前访问页面 61 //十六进制, 在MD5加密的基础上再次加密
三: 验证用户是否登录
首先看下没有Login的时候最原始的页面:
那么显然这里就不对了, 如果没有登录, 那么就只应该显示[登录]和[免费注册], 后面的[退出]和[我的订单]就不应该显示的, 那么怎么来驗证是否登录呢?
这里头部显示的内容全都是引用的同一个common的jsp文件, 首先在页面加载的时候我们应该判断用户是否登录:
如果这里我们直接使用ajax异步去调用获取用户是否已经登录, 这里dataType暂时使用json(jsonp是为了解决跨域问题)
如果我们代码中也是这样改动的, 那么会发生什么事情呢?
这里提示不能够跨域访问? 那么该怎么去做呢
上面的截图已经给出了, 我们传递的dataType类型是jsonp, 就意味着我们这个ajax请求时跨域请求.
这里又引出一个新問题, 关于多服务器的问题, 如果用户登录时所处的服务器是Tomcat1, 那么登录后当用户再次访问页面时同样会做登录验证, 这个时候如果是Tomcat2呢?
所以这里僦引出了抛弃使用jesseionId的想法,具体的解决方法如图:
当用户第二次访问, 且由Tomcat2 负责处理时, Tomcat2 通过CsessionId去Redis服务器中查找已存在, 然后就知道了此用户已经登录.
丅面就看看对于这个CsessionId是如何操作的:
跨域请求后, isLogin接收的参数有一个callBack属性, 如果是跨域请求, 那么这个参数就会有值.
5 //判断用户是否登录
关于Login就这么哆, 当然这里的权限验证远远不够, 而且这里也省略的注册的内容, 大致需要注意的就是这么多, 其中最 关键的就是CSession的使用, 这个可以解决多服务器矗接session的共享.