`
京都剑豪
  • 浏览: 3390 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

关于在javaweb开发中禁用cookie

    博客分类:
  • java
阅读更多
    今天公司项目发现一个情况,在禁用了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。 问题解决
分享到:
评论

相关推荐

    JavaWeb程序设计入门课件Cookie对象共6页.pd

    【JavaWeb程序设计入门课件Cookie对象共6页.pdf.zip】是一个压缩文件,其中包含了关于JavaWeb开发中Cookie对象的基础教程。Cookie是Web应用程序中用于存储客户端信息的一种机制,它是HTTP协议无状态特性的一种补充。...

    javaweb后台删除,验证

    在JavaWeb开发中,后台验证和删除操作是关键的功能之一,尤其对于初学者来说,理解并实现这些功能是掌握Web应用程序开发的基础。本教程将详细解释如何在JavaWeb环境中进行后台验证和删除操作。 首先,我们需要了解...

    JavaWeb会话跟踪技术

    当客户端发起请求时,如果没有Cookie或者Cookie中的Session ID无效,服务器会生成新的Session ID并将其通过Cookie返回给客户端。下次客户端请求时,携带这个Session ID,服务器就能找到对应的Session,从而获取用户...

    javaWeb选择题,面试

    - C选项:当Cookie被禁用时,可以采用URL重写的方式进行会话跟踪,即在URL中加入会话标识来保持会话状态,故C选项正确。 - D选项:隐藏表单域不是一种会话跟踪技术,而是在HTML表单中添加一个不可见的字段,用于...

    Java Web应用开发 29 课堂案例-使用cookie制作站点计数器.docx

    此外,对于隐私保护越来越重视的今天,有些用户可能会禁用Cookie,这也会对计数结果产生影响。 总结来说,本案例主要介绍了Java Web中如何利用Cookie进行用户跟踪和计数,以及Cookie对象的基本操作,如创建、获取和...

    JavaWeb程序设计入门课件Session对象共9页.p

    在JavaWeb开发中,Session对象是HTTP协议无状态特性的补充,它为客户端与服务器端之间提供了存储会话级数据的机制。本课件深入浅出地介绍了Session的概念、工作原理以及在实际应用中的使用方法。 1. **Session的...

    JavaWeb基础总结

    URL重写主要用于解决Cookie禁用情况下的会话追踪问题。它将Session ID附加到URL上,以便服务器能够识别不同的用户。 #### 7. JSP页面 JSP(JavaServer Pages)是一种基于Java技术的动态网页技术。它允许开发者将...

    JAVAWEB选择题.pdf

    在禁用Cookie时,可以使用URL重写;隐藏表单域用于在表单提交时不显示数据。正确答案是ABC。 4. **重定向**:在J2EE中,使用`response.sendRedirect()`方法进行页面重定向,传入目标URL。正确答案是C。 5. **EL...

    攻击JavaWeb应用1-9[JavaWeb安全系列]

    JavaWeb安全是IT行业中至关重要的一个领域,尤其是在开发和维护Web应用程序时,了解并防范各类攻击至关重要。这个系列涵盖了从基础到进阶的JavaWeb安全问题,主要关注的是攻击手段和防御策略。以下是对这些知识点的...

    javaweb面试题

    JavaWeb面试题主要涵盖了许多核心概念和技术,包括Filter、自定义标签、会话跟踪、...理解并掌握以上知识点对于JavaWeb开发者来说至关重要,它们涵盖了Web应用开发中的关键环节,有助于在面试中展现出扎实的技术基础。

    javaWeb面试题1

    12. **Cookie被禁用后的Session使用**: - 使用URL重写,将Session ID附加到URL参数中。 13. **项目开发阶段**: - 需求分析。 - 设计(用例、用例文本、实体、数据字典、数据流图)。 - 编码。 - 测试。 - ...

    javaweb题库选择+笔试题

    - **结论**:会话跟踪技术包括使用Cookie、URL重写等,它们可以在禁用Cookie的情况下依然保持会话状态。 ### 4. 请求重定向 - **选项分析**: - A. **request.sendRedirect("http://www.svse.com.cn");**:错误,...

    java web整合开发王者归来光盘代码-第五章 会话跟踪

    在Java Web开发中,会话跟踪是至关重要的一个环节,特别是在构建复杂的Web应用程序时,如JSP、Servlet、Struts、Hibernate以及Spring等框架的整合应用。本资源"java web整合开发王者归来光盘代码-第五章 会话跟踪...

    第五章:会话及会话技术chapter05

    在IT行业中,尤其是在Web开发领域,会话管理是至关重要的一个环节。本章节"第五章:会话及会话技术chapter05"聚焦于JavaWeb中的会话控制,这是一种允许服务器跟踪用户状态的关键技术,特别是在无状态的HTTP协议中。...

    jsp实验代码,使用session

    在JavaWeb开发中,Session是服务器端用于跟踪用户状态的一种机制。本实验代码主要围绕如何在JSP页面中有效地使用Session进行讲解和实践。 1. **Session的基本概念** Session是HTTP协议无状态特性的补充,因为HTTP...

    java技术面试-----------javaWeb.md

    - Session ID会被存储在Cookie中,并随着每次HTTP请求发送回服务器。 - 服务器可以根据Session ID找到相应的Session对象,并从中读取用户的信息。 #### 四、JSON数据格式 JSON(JavaScript Object Notation)是...

    JavaWeb Session 会话管理实例详解

    JavaWeb Session 会话管理是Web开发中一种重要的技术,用于在用户的不同请求之间保持状态。在Web应用中,由于HTTP协议的无状态性,每次请求都是独立的,无法识别同一用户的不同操作。Session机制解决了这个问题,...

    03_javaWeb知识之:EL表达式

    如果希望在某个特定的JSP页面中禁用EL表达式,可以通过`&lt;%@ page isELIgnored="true" %&gt;`指令来实现。这使得开发者能够在需要时控制EL表达式的使用。 #### 三、EL表达式的运算符 需要注意的是,当EL表达式的值为`...

Global site tag (gtag.js) - Google Analytics