`
yuwenlin2008
  • 浏览: 127200 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

WebApp之Cookie原理

阅读更多

  要说Cookie是怎么来的,先来说说Http请求的特点
  
       Http协议是无连接的,意思是说当我们的浏览器请求服务器的一个页面时,一旦请求完成,服务器作出响应,客户端浏览器拿到这个页面的内容,立即断开连接,说白了就是Socket关闭了,浏览器和服务器之间就没有连接了。

       那有个问题比如,我们上京东买本书,在还未登陆的情况下(避免与Session冲突),通常情况是在一个页面点击购买或加入购物车,点击结账会跳到另一个页面,另一个页面会显示我们购买的书。  

       既然Http协议是无连接的,当我们通过第一个页面点击购买后,连接就断了,哪到第二个页面,它(服务器)怎么知道我买的是哪本书,或者知道我买的是什么,或者我是谁?这就是Cookie在起作用,它帮服务器记住了。(当然这里除了Cookie,还有浏览器的特性,比如每个浏览器有唯一的编号,当我请求第二个页面时,服务器会到我本地来取Cookie信息)

       因为Http协议是无连接的,所以它需要一种类似QQ聊天那样的不断与服务器保持连接的机制,用它来记录着客户端浏览器在我服务器端都干什么了,用我们的行话来说就是维护用户跟服务器间的会话状态,所以就产生了Cookie,Session, 以及Application等会话技术。

  那Cookie到底是个什么东西呢?

  Cookie是服务端写在客户端本地一个文件,你放心不会是病度或木马,因为Cookie只允许它创建txt的文本文件。客户端浏览器也可以阻止Cookie的写入,比如上面买书,如果浏览器Cookie被禁止写入,那么第二个页面购物车将看不到任何东西。还有每个网站写的Cookie都不一样,新浪可以写,搜狐也可以写,但它们都只能拿自己的Cookie。

  以Java为例,说说Cookie的用法:

  Cookie是以“名-值”对的形式保存的,类似Map;

  创建Cookie:new Cookie(name,value);

  setName(String name) / getName();

  setValue(String value) / getValue();

  setMaxAge(int expiry) / getMaxAge();
  利用HttpServletResponse的addCookie(Cookie cookie)方法将Cookie设置到客户端;
  利用HttpServletRequest的getCookies()方法来读取客户端的所有Cookie;

  因为Cookie可以设置存活时间setMaxAge(int expiry),因此就有了存储方式的不同:

  1.设置了存活时间的Cookie,会在客户端本地创建一份Cookie文件。

  2.没有设置存活时间的Cookie,会在客户端浏览器内存中创建一份Cookie,它在本地Cookie文件中是找不到的,它的生命周期依赖于浏览器窗口,当浏览器窗口关闭,它将消失,而且其它新开的浏览器窗口都访问不到它,只有它和它的子窗口,即通过window.open()出来的,可以访问,测试的时候可以使用快捷键ctrl+n弹出一个子窗口。

  经过测试改变设置和访问Cookie的URL路径,Cookie的访问也会有所不同:

  1.设置Cookie的Servlet URL:/servlet/SetCookies

   访问Cookie的Servlet URL:/ShowCookie

  发现SetCookies可以创建Cookie,但ShowCookie访问不到

  2.设置Cookie的Servlet URL:/SetCookies

   访问Cookie的Servlet URL:/servlet/ShowCookie

  发现SetCookies可以创建Cookie,ShowCookie也访问到

  从包结构的访问层次来说,就是因为1中,ShowCookie路径比SetCookies高一级,而2中,ShowCookie是SetCookies的子级,因此可以得出一个Jsp/Servlet设置的Cookie可以被同一路径或子路径的Jsp/Servlet访问得到。

  总结一下Cookie的特点:

  1.服务器可以向客户端写内容

  2.只能写文本内容

  3.只能拿自己webapp写入的Cookie

  4.客户端可以阻止服务器Cookie的写入

  5.Cookie分两种:

    存在于文本文件

    存在于内存(属于窗口/子窗口)

  6.一个Jsp/Servlet设置的Cookie可以被同一路径或子路径的Jsp/Servlet访问得到

 

  以上是个人学习和总结,欢迎拍砖。

 

1
0
分享到:
评论

相关推荐

    Tomcat原理与实战

    通常,Tomcat默认监听8080端口,通过webapp目录来加载和运行Web应用。 - **架构设计** - **连接器模型**:Tomcat支持两种连接器模型,即BIO( Blocking I/O)和NIO(Non-blocking I/O)。BIO模型采用同步阻塞的...

    很棒的python3-webapp

    7. **用户认证与授权**:理解如何实现用户注册、登录功能,以及权限管理,可能涉及session和cookie的使用。 8. **错误处理与日志记录**:了解如何优雅地处理程序中的异常,以及设置日志系统以便于调试和维护。 9. ...

    学习如何使用JWT来保护您的WebApp包含教程测试示例

    这个教程将帮助您理解JWT的工作原理,并提供实践指导,确保您的Web应用的安全性。 一、JWT简介 JWT由三个部分组成:头部(Header)、载荷(Payload)和签名(Signature)。它们之间用点(.)分隔。头部和载荷是JSON...

    基于java的-27-“星辰”旅行分享系统-源码.zip

    `src\main\webapp\resources\assets2\js\wizard\lib\jquery.cookie-1.3.1.js`是jQuery Cookie库的引用,用于处理客户端的Cookie,可能在用户会话管理和个性化设置中发挥作用。 `src\main\webapp\resources\My97...

    web程序猿简历模板,可根据自己的实际情况修改,带项目经验

    1. **洋码头**: 嘻嘻在此项目中负责部分页面布局和JavaScript逻辑控制,使用了div+css布局,正则表达式,jQuery实现效果,Ajax调用后台数据,以及cookie应用。 2. **洋葱淘**: 她在WebApp项目中负责手机端布局和...

    Servlet笔记

    总之,Servlet是Java Web开发的基础,了解其基本概念和工作原理对于构建高效、可靠的Web应用程序至关重要。通过深入学习Servlet的工作机制,开发者可以更好地控制Web应用程序的行为,从而提高应用的安全性和性能。

    JavaScript注入漏洞的原理及防范(详解)

    当这个输入在前端页面中被显示或者在后端中被执行时,注入的JavaScript代码也会随之执行。这种注入可以影响到网站的用户,甚至能获取用户的敏感信息,如Cookie中的会话令牌等。 注入漏洞的关键在于两个动作:首先,...

    一个简单的jsp+servlet的单点登录项目

    - `webapp`:Web应用的根目录,包含JSP页面、Servlet配置和静态资源。 - `WEB-INF`:存放Web应用的配置文件,如`web.xml`,定义了Servlet的映射和初始化参数。 - `src/main/java`:Java源代码目录,包含Servlet类和...

    web前端简历模板.pdf

    专业技能方面,该简历模板涵盖了多个技术栈,包括 HTML、CSS、JavaScript、响应式布局、弹性盒布局、HTML5、WebApp、移动端适配、CSS3、JSON、LocalStorage、SessionStorage、Cookie、本地存储、HTTP 协议、ES6、...

    使用过滤器完成用户登录验证

    过滤器的工作原理是基于Servlet规范中的Filter接口。当一个HTTP请求到达服务器时,过滤器链会被触发,每个过滤器都有机会检查请求并决定是否允许其通过,或者进行一些预处理操作。如果过滤器允许请求继续,它会将...

    CAS配置详解

    用户登录成功后,CAS Server会产生一个Service Ticket并缓存,同时通过Ticket Granted Cookie(TGC)返回给客户端浏览器。之后,CAS Client会利用Service和Ticket与CAS Server进行校验,确保Service Ticket的有效性...

    基于javaweb实现的简单购物商城0418.rar

    【标题】"基于javaweb实现的简单购物商城0418.rar" 是一个压缩包文件,它包含了一个使用JavaWeb技术开发的简易在线购物商城的源代码和相关...通过分析和运行这个项目,可以深入理解JavaWeb技术栈的工作原理和实际应用。

    CAS3.5单点登录修改后jar包下载

    用户首次访问受保护的应用时,会被重定向到CAS服务器进行身份验证,成功后会生成TGT,这个TGT存储在用户的浏览器cookie中。之后,当用户尝试访问其他受CAS保护的应用时,只需要检查他们是否拥有有效的TGT,无需再次...

    JAVAWEB校园订餐系统项目源码(实用).zip

    2. **src**:源代码目录,通常分为java和webapp两个子目录,java存放Java类文件,webapp可能存放Servlet和JSP页面。 3. **WEB-INF**:存放Web应用的配置文件,如web.xml(Web应用部署描述符),以及库文件(lib)。 ...

    cas单点登录server端代码

    2. cas-server-webapp-4.0.0.war: 这个war文件是CAS Server的web应用程序,包含了运行CAS Server所需的所有类和资源。它可以被直接部署到支持Servlet 3.0或更高版本的任何Java应用服务器,如Tomcat、Jetty等。部署...

    python 第七章 web开发 代码

    通过学习和运行这个代码,读者可以亲身体验Python Web开发的魅力,理解Web应用的基本工作原理,并逐步构建自己的Web服务。同时,这也是一个极好的实践机会,可以帮助巩固理论知识并提升实际编程技能。

    人才招聘网站代码 程序.zip

    以下将详细介绍其中的关键技术和实现原理。 首先,核心框架是MyBatis,这是一个流行的Java持久层框架,它简化了数据库操作,通过SQL映射文件将Java对象与数据库记录关联起来。MyBatis的优势在于它的灵活性,允许...

    java web投票系统

    通过分析和研究这个Java Web投票系统,你可以深入理解Struts框架的工作原理,学习如何利用JFreeChart生成图表,同时还能了解Java Web开发的基本流程和组件。对于想要提升Java Web开发技能的开发者来说,这是一个很好...

    CAS单点登录服务器配置详情

    1. **修改部署配置文件**:打开`cas-server-webapp\WEB-INF\deployerConfigContext.xml`文件,找到`SimpleTestUsernamePasswordAuthenticationHandler`配置项,将其替换为`QueryDatabaseAuthenticationHandler`。...

    nostarch1.zip

    XSS则能让攻击者在用户浏览器上执行恶意脚本,可能窃取用户的会话cookie或其他个人信息。文件包含漏洞可能导致远程代码执行,当应用程序不正确地处理用户提供的文件路径时,攻击者可以指定包含远程文件,从而执行...

Global site tag (gtag.js) - Google Analytics