Cookie的domain、path和session的一些点

本文详细介绍了Cookie中domain和path属性的作用及设置规则,包括如何设置、获取及删除带有特定domain和path的Cookie。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    首先先讲session的一个问题,当浏览器第一次访问服务器的时候,服务器的响应header里面会返回set-cookie,里面存储的seesionId。它只会在第一次访问服务器,响应头才会出现。之后浏览器会一直带着该sessionId去访问服务器。至于的的key值的名字会根据服务器的不同而不同,比如weblogic对于web应用程序生成的cookieJSESSIONID=XXXX,它的名字就是JSESSIONID。 

 

一、domain

  • 设置cookie——设置cookie的时候,domain要符合域名的规则,比如可以设置成www1.pclady.com.cn和pclady.com.cn 但是不能设置成pclady。要有.com.cn或者其他域名做结尾。 通过js手动设置cookie的domain都是以.开头的。比如设置domain=pclady.com.cn,实际的domain名为.pclady.com.cn;删除cookie时加不加.都可以。
  • 获取cookie——js只能获取domian大于等于当前页面域名的cookie。比如http://www1.pclady.com.cn/zt/20160623/testCookie.html页面中的js能获取domain为“www1.pclady.com.cn”和“.www1.pclady.com.cn”和“.pclady.com.cn”但是获取不到“g.pclady.com.cn”中的cookie;
  • 删除cookie——要删除一个cookie,domain值必须跟要删除cookie的domain相同,默认的domain为html文件的domain。
  • 跨域domain——js不可以把cookie设置成不同与html域名的domian。cookie设置不会成功,但不会影响后面程序对cookie的操作。
  • 错误——如果domain设置错误,该cookie将不会被创建,并且后续对cookie的操作不论正确与否都会被浏览器禁止。

 

二、path

  • 设置cookie——js设置path要以"/"开头,比如html路径为"/zt/20160623/",路径可以设置成"/"或"/zt"。
  • 获取cookie——使用js只能获取path大于等于当前页面path的cookie,比如html路径为/zt/20160623/,使用js只能获取“/zt/20160623/”和“/zt”和“/”路径下的cookie。不能获取其他路径下的cookie
  • 删除cookie——删除cookie的时候路径也必须相同,默认的路径是html的path路径。
  • 错误——如果path不是以"/"开头的则创建cookie的path使用默认的path;如果是以"/"开头但是设置错了,路径名不存在或者直接设置成子路径。比如设置成"/20160623"或者"/zt1",该cookie将不会被创建,并且后续对cookie的操作不论正确与否都会被浏览器禁止。
### 设置或理解 Session Domain Path 在 Web 开发中,`session domain path` 是指会话 cookie 的作用域路径。这决定了该 cookie 可用于哪些 URL 路径下的请求。 当设置 session 时,默认情况下,cookie 的路径通常为创建它的应用程序上下文路径。然而,可以通过配置来指定不同的路径[^3]。 对于 Java Servlet API 来说,在默认行为下,`getSession()` 方法并不会直接提供接口去设定 session 或其关联 cookie 的具体路径属性。但是可以间接控制这些参数: - **通过编程方式**:可以在响应头中手动添加 Set-Cookie 字段并自定义其中的 Path 参数。 ```java // 手动设置 Cookie 并指定路径 Cookie sessionCookie = new Cookie("JSESSIONID", sessionId); sessionCookie.setPath("/desired/path"); response.addCookie(sessionCookie); ``` - **框架级别的配置**:许多现代 web 框架允许开发者更方便地管理 sessions cookies 属性。例如 Spring Security 提供了多种机制来自定义 session 配置[^4]。 需要注意的是,虽然可以直接操作底层 HTTP headers 来影响 session 行为,但在实际项目里推荐遵循所使用的特定框架的最佳实践来进行相应调整。 #### 关于 `domain` 属性 除了路径外,还可以设置 `domain` 属性使得同一个顶级域名下的多个子域名共享同一份 session 数据。这对于拥有多个子站的应用程序特别有用。不过要注意跨站脚本攻击 (XSS) 的风险以及同源策略的影响[^2]。 ```java // 同时设置 domain path Cookie sessionCookie = new Cookie("JSESSIONID", sessionId); sessionCookie.setDomain(".example.com"); // 注意前缀表示适用于所有子域名 sessionCookie.setPath("/"); response.addCookie(sessionCookie); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值