其他的都很熟悉了,最后一个迅困改是 Chrome 51 开始,浏览器的 Cookie 新增加了一个 SameSite 属性,用来防止 CSRF 攻击和用户追踪。
在Javaweb应用中 ,设置 Cookie一般都是用 javax.servlet.http.Cookie ,尺笑但是 SameSite 属性出来不久, Servlet 库还没更新,所以没有设置 SameSite 的方法.
可以看到,还没有 SameSite 的定义
本质上, Cookie 也只是一个 header 。我们可以不使用 Cookie 对象,而通过自定义 Header 的亩判方式来给客户端设置 Cookie 。
ResponseCookie 是Spring定义的一个 Cookie 构建工具类,极其简单
所有属性都响应正确 √
HttpSession 依赖一个名称叫做 JSESSIONID (默认名称)的Cookie。
对于 JSESSIONID Cookie 的设置,可以修改如下配置。但是,目前spring也没实现 SameSite 的配置项。
通过自定义 CookieSerializer 设置 SameSite 属性
原文: https://springboot.io/t/topic/2602
说起来 Cookie应该是一种应用较久的技术了 早在HTML刚刚出现的时候 在每个独立的页面之间没有办 法记录和标识不同的用户 后来人们就发明了Cookie技术 当用户访问网页时 它能够在访问者的机器上创立一个文件 我们把它叫作Cookie 写一段 内容进去 来标识不同的用户 如果下次用户再访问这个网页的时候 它又能够读出这个文件里面的内容 这样网页就知道上次这个用户已经访问过该网页了
虽然现在网页的制作技术比起几年以前已经发展了许多 不过有些时候 Cookie还是能够帮我们很多忙的 接下来 我们就来看看 如何在写jsp文件的时候 用JSP *** 作Cookie
二 写入Cookie
其实用JSP *** 作Cookie是非常简单的 我们来看下面一段JSP程序
(中间略)
<% String cookieName="Sender"Cookie cookie=new Cookie(cookieName "Test_Content")cookie setMaxAge( )response addCookie(cookie)%> (其他内容)
这样我们就设置了一个Cookie 很简单吧?
我们来仔细者亏锋研究一下这段代码
Cookie cookie=new Cookie(cookieName "Test_Content")
这一行建立了一个Cookie对象 初始化有两个参数 第一个参数cookieName定义了Cookie的名字 后一个参数 也是一个字符串 定义了Cookie的内容 也就是我们希望网页在用户的机器上标识的文件内容
接下来一行 cookie setMaxAge( ) 调用了Cookie中的setMaxAge方法 设定Cookie在用户机器硬盘上的 存活期为 秒 一个Cookie在首晌用户的硬盘里面存在的时间并不是无限期的 在建立Cookie对象的时候 我们必须制定Cookie的存活期 超过了 这个存活期后 Cookie文件就不再起作用 会被用户的浏览器自行删除 如果我们希望用户在下次访问这个页面的时候 Cookie文件仍然有效而且可以 被网页读出来的话 我们可以将Cookie的存活期设得稍微长一些 比如cookie setMaxAge( * * * )可以让 Cookie文件在一年内有效
三 读出Cookie
Cookie文件创建好后 自然还需要我们把它读出来 否则我们不是白费力气吗?接下来我们看看如何读出在用户硬盘上的Cookie
(中间略)
Name value
<% Cookie cookies[]=request getCookies()Cookie sCookie=nullString svalue=nullString sname=nullfor(int i= i{ sCookie=cookies[i]svalue=sCookie getValue()sname=sCookie getName()%>
<% } %>
name value <%=name%> <%=svalue%>
(其他内容)
这一小段JSP文件可以读出用户硬盘上的所有有效的Cookie 也就是仍然在存空衡活期内的Cookie文件 并用表格的形式列出每个Cookie的名字和内容
我们来逐行分析一下这段代码
Cookie cookies[]=request getCookies() 我们用request getCookies()读出用户硬盘上的Cookie 并将所有的Cookie放到一个cookie对象数组里面
接下来我们用一个循环语句遍历刚才建立的Cookie对象数组 我们用sCookie=cookies[i]取出数组中的一个Cookie对 象 然后我们用sCookie getValue()和sCookie getName()两个方法来取得这个Cookie的名字和内容
通过将取出来的Cookie的名字和内容放在字符串变量中 我们就能对其进行各种 *** 作了 在上面的例子里 可通过循环语句的遍历 将所有Cookie放在一张表格中进行显示
四 需要注意的一些问题
通过上面两个简单的例子 可以看到 用JSP进行Cookie的 *** 作 是非常简单的 不过我们在实际 *** 作中还要注意一些问题
Cookie的兼容性问题
Cookie的格式有 个不同的版本 第一个版本 我们称为Cookie Version 是最初由Netscape公司制定的 也被几乎所有的浏览器支持 而较新的版本 Cookie Version 则是根据RFC 文档制定的 为了确保兼容性 java规定 前面所提到的涉及Cookie的 *** 作都是针对旧版本的Cookie进行的 而新版本的Cookie目前还不被Javax servlet 包所支持
Cookie的内容
同样的Cookie的内容的字符限制针对不同的Cookie版本也有不同 在Cookie Version 中 某些特殊的字符 例如 空格 方括号 圆括号 等于号(=) 逗号 双引号 斜杠 问号 @符号 冒号 分号都不能作为Cookie的内容 这也就 是为什么我们在例子中设定Cookie的内容为"Test_Content"的原因
lishixinzhi/Article/program/Java/JSP/201311/20084
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)