今天公司项目发现一个情况,在禁用了cookie之后网站无法登陆,开始并没有碰到这种情况,也是手忙脚乱的检查了半天。
首先,是错误提示,错误提示一直是验证码错误,OK,在对应的action上面打个断点,然后再次登录。登录的报错代码如下
//验证码
String ccode = request.getParameter("ccode");
setObj2ActionContext("ccode", ccode);
//记住密码
String remember = request.getParameter("remember");
setObj2ActionContext("remember", remember);
//来自哪个登录页面
String from = request.getParameter("from");
//设置页面不缓存
CommonUtil.setAjaxResponseAttr(response);
//1.拿到系统验证码
Object rand = request.getSession().getAttribute("rand");
if (!"newPage".equals(from) &&!ccode.equals(rand)) {
setObj2ActionContext(Constants.MSG, "01");//01:验证码不正确
if(Constants.LOGIN_FROM_CEF.equals(from)){//来自cef登录客户端
return Constants.TO_CEF_LOGIN;
}else{
return Constants.TO_LOGIN;
}
}
上面页面获得的值一直很正常,可是到了获得rand值的时候,我发现rand的值是null;开始以为rand是session没有给到值,可是找到源头,发现session存储的rand的初始值并不是null,而是""。
这个时候我暂时先关闭了禁用cookie,登陆正常之后,顺手先开启禁用禁用cookie,这个时候再点击退出的时候,系统直接爆出了700错误:登陆超时。
这时候我似乎明白这个错误可能和登陆session有关,禁用了cookie之后,打开百度准备登陆百度账号,结果发现百度提示需要关闭禁用cookie才可以登陆。好吧碰到这种情况,百度一下是我们最忠实的伙伴,关键词:禁用cookie session 获得答案如下:
SESSION并不是COOKIE的子集ASP中:SESSION 必须倚赖COOKIE才可用,SESSION是存储在服 务器端的,而COOKIE是存储在客户端的,相对而言,SESSION的安全性和可靠程度都比COOKIE高ASP.NET中SESSION可以不依赖COOKIE而存在!!!
也就是说,从微软的方面来说,开始让SESSION摆脱COOKIE的束缚了!!
Session数据是存储在服务器上的,Cookie数据是存储在浏览器本机上的.
但如果浏览器不支持使用/接受Cookie,则不能使用Session.
这是因为,虽然Session真正的数据是存储在服务器上的,但每个Session都对应了一个由Web服务器指定的唯一识别符SeesionID,而在浏览器里是使用Cookie来存储这个SeesionID的.所以使用Session,浏览器必须支持Cookie.
cookie是一个特殊的信息
只是服务器存于用户计算机上的一个文本文件
Session很大的实际意义的
当一个用户提交了表单时
浏览器会将用户的SessionID自动附加在HTTP头信息中
当服务器处理完这个表单后
将结果返回给SessionID所对应的用户
客户端的Session信息是存储于Cookie中的
如果客户端完全禁用掉了Cookie功能
他也就不能享受到了Session提供的功能了
好吧,到这儿明白了 禁用cookie = 无法获得本地的sessionId = 无法使用session,所以验证码在后台无法获得值,因为session根本无法获得。然后是百度某位大佬的禁用cookie后session的使用方法
你需要在所有连接(http href)中加入sid这个参数,以保证session id的传递
当客户端浏览器中禁止 Cookie,Servlet 容器无法从客户端浏览器中取得作为 Cookie 的 Session ID,也就无法跟踪客户状态。
Java Servlet API 中提出了跟踪 Session 的另一种机制,如果客户端浏览器不支持 Cookie,Servlet 容器可以重写客户请求的 URL,把 Session ID 添加到 URL 信息中。
HttpServletResponse 接口提供了重写 URL 的方法:public java.lang.String encodeURL(java.lang.String url)
该方法的实现机制为:
● 先判断当前的 Web 组件是否启用 Session,如果没有启用 Session,直接返回参数 url。
● 再判断客户端浏览器是否支持 Cookie,如果支持 Cookie,直接返回参数 url;如果不支持 Cookie,就在参数 url 中加入 Session ID 信息,然后返回修改后的 url。
我们可以对网页中的链接稍作修改,解决以上问题:
修改前:
<a href=“maillogin.jsp“>
修改后:
<a href=“<%=response.encodeURL(“maillogin.jsp“)%>“>
虽然这种方法可以解决禁用cookie问题 但是开发会变得非常麻烦,而且大部分时间内并没有人会全局禁用session,所以最后我的解决方案是,加了个提示,session存储一个关键字,用户登录界面如果无法取到这个关键字,会直接提示请关闭禁用cookie。 问题解决
分享到:
相关推荐
Cookie 对象是 JavaWeb 开发技术中的一种重要组件,用于在浏览器和服务器之间传输用户信息。下面是关于 Cookie 对象的详细知识点: 什么是 Cookie? Cookie 是一种小型文本文件,存储在客户端浏览器中,用于存储...
javaWeb开发技术大全 所有源代码
javaweb开发jar包,可以根据需要下载,有需要的还会再上传的,谢谢!
Tomcat与JavaWeb开发技术详解书本的源代码。
javaweb开发内幕javaweb开发内幕javaweb开发内幕
javaweb开发经验总结,hibernate,spring,mysql方面的
javaweb开发中所需要的json包 javaweb开发中所需要的json包 javaweb开发中所需要的json包 javaweb开发中所需要的json包
cookie是一种WEB服务器通过浏览器在访问者的硬盘上存储信息的手段。Cookie的目的就是为用户带来方便,为网站带来增值。这篇文章主要介绍了JavaWeb 中Cookie实现记住密码的功能示例,需要的朋友可以参考下
在使用eclipse进行javaweb开发的时候,需要很多jar包,其中所包含的jar适合初学者使用
JavaWeb 开发之路经验总结
在JavaWeb开发中实现文件上载
本视频通过一个小案例讲解了在eclipse中进行JavaWeb项目开发时,前期所做得必要的环境配置工作。视频内容主题明确、重点突出,讲解过程条理清晰。
Javaweb开发技术详解,北京科海电子出版社 作者为汪大乐
javaweb中Cookie对用户密码保存的例子,当我们在购物网站浏览的时候,下次访问的时候就会出现我们访问过的记录,这个例子就是以Cookie为原理写的JavaWeb代码例子.
基于SSM框架的JavaWeb开发课程教学中的几点思考.docx基于SSM框架的JavaWeb开发课程教学中的几点思考.docx基于SSM框架的JavaWeb开发课程教学中的几点思考.docx基于SSM框架的JavaWeb开发课程教学中的几点思考.docx基于...
javaweb教学案例-cookie
Tomcat与JavaWeb开发技术详解-随书源码
JavaWeb开发内幕——核心技术作为javaweb学习参考学习资料,由于pdf文件太大,本人已将其压缩分卷,请大家把三个压缩包都下载下来在进行解压
JavaWeb开发笔记
JSP&Servlet-PPT.zip: javaWeb开发PPT大全,共 17章节 PPT