今天需要在用户登录后添加别的域的cookie,然后网上搜了一下,发现大多数写的都是一样,但是我测试就是不行。由于自己对cookie也不了解,所以只能接着看,然后发现了自己的cookie生成不了的原因。
下面的是我自己贴过来备用的, 原文地址请看
http://www.vinceruan.info/front/cross-domain-process-cookie-session/
看一下前面跨域共享cookie的介绍就行。我的设置不了的原因就是如下面所说:在blog.vinceruan.info域下面设置www.vinceruan.info下面的cookie,然后就生成不了,解决办法是将cookie设置到.vinceruan.info下面 .是一定要加的 去掉成功与否没测试过
浏览器提交的cookie需要满足以下两点:
1.当前域名或者父域名下的cookie
而且
2.当前路径或父路径下的cookie
要满足以上两个条件的cookie才会被提交.
有4个cookie:
cookie1:[name=value, domain=.vinceruan.info path=/]
cookie2:[name=value, domain=blog.vinceruan.info path=/java/]
cookie3:[name=value, domain=www.vinceruan.info path=/]
cookie4:[name=value, domain=blog.vinceruan.info path=/]
当我访问blog.vinceruan.info时,
cookie1可以被提交,因为.vinceruan.info是blog.vinceruan.info的父域名. path路径也一致.
cookie2不能被提交,因为虽然domain是保持一致的,但是path不一致,当前访问的是/, 但是cookie2的path是/java/
cookie3不能被提交,因为虽然path是一致的,但是www.vinceruan.info不是blog.vinceruan.info的父域名.
cookie4可以被提交,因为domain和cookie都严格保持一致.
这里需要注意的是, 在浏览器看来.www.vinceruan.info不是blog.vinceruan.info的父域名,而vinceruan.info才是blog.vinceruan.info的父域名,www.vinceruan.info也算是一个二级域名(这点如果你提交过域名到DNS服务器商的应该会知道,一般我们需要显式提交www.vinceruan.info和vinceruan.info, 否则www.vinceruan.info==vinceruan.info是不成立的).
所以如果我们需要在所有二级域名下共享islogin=1的cookie,用java代码如下:
Cookie c = new Cookie("islogin","1");
c.setDomain(".vinceruan.info");//注意是以点号开头的.
c.setPath=("/");
response.addCookie(c);
如果要在所有的二级域名下的/java/路径下共享silogin=1的cookie,用java代码如下:
Cookie c = new Cookie("islogin","1");
c.setDomain(".vinceruan.info");//注意是以点号开头的.
c.setPath=("/java/");
response.addCookie(c);
ok, 跨域共享cookie就完成了
分享到:
相关推荐
最后,使用`response.addCookie(cookie)`将Cookie添加到响应中,发送给客户端。 2. 读取Cookie 在服务器端,我们可以使用HttpServletRequest的`getCookies()`方法来获取客户端发送的所有Cookie。这个方法会返回一个...
4. **读取Cookie**:在后续的请求中,`HttpServletRequest`对象提供了`getCookies()`方法,可以获取所有发送回服务器的Cookie。 **JSP中Cookie的使用示例:** ```jsp ; charset=UTF-8" pageEncoding="UTF-8"%> /...
- 最后,通过`response.addCookie(cookie)`将Cookie添加到响应中,使其发送到客户端。 2. **读取Cookie** - 从`HttpServletRequest`对象中使用`getCookies()`方法读取所有Cookie,例如`Cookie[] cookies = ...
在Servlet中,可以通过`HttpServletRequest`对象的`getCookies()`方法来获取客户端发送过来的所有Cookie。如果客户端没有发送Cookie,则该方法返回`null`。 ```java Cookie[] cookies = req.getCookies(); ``` ###...
在服务器端,我们可以使用`HttpServletRequest`的`getCookies()`方法获取所有Cookie,然后根据名称查找特定的Cookie: ```java Cookie[] cookies = request.getCookies(); for (Cookie c : cookies) { if (c....
3. **Cookie的读取**:在JSP或Servlet中,我们可以通过`HttpServletRequest`对象的`getCookies()`方法获取所有Cookie,然后遍历查找我们需要的Cookie: ```jsp Cookie[] cookies = request.getCookies(); for ...
清除Cookie的逻辑是为每个需要清除的Cookie创建一个新的`Cookie`对象,将其值设为`null`,然后使用`HttpServletResponse`的`addCookie()`方法将这些新的Cookie添加到响应中。当浏览器接收到这些值为`null`的Cookie...
当服务器响应时,可以通过HttpServletResponse的`addCookie(Cookie cookie)`方法添加Cookie到响应头中。Cookie对象需要预先设置好名称、值、过期时间等属性。例如: ```java Cookie cookie = new Cookie("name", ...
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 设置允许所有域名访问 response.setHeader("Access-Control-Allow-Origin", "*")...
Servlet可以通过`HttpServletResponse`对象的`addCookie()`方法添加Cookie,通过`HttpServletRequest`对象的`getCookies()`方法获取Cookie。以下是一个简单的示例: ```java // 创建Cookie Cookie cookie = new ...
- 使用`HttpServletRequest`的`getCookies()`方法获取所有Cookie,查找包含Session ID的Cookie。 - 检查Cookie的有效性和Session ID,如果匹配,则认为用户已登录,直接设置会话状态。 ```java Cookie[] cookies = ...
2. **工作原理**:服务器在响应客户端请求时,通过`response`对象添加Cookie。客户端浏览器接收后,会将Cookie保存在本地。下次请求同一网站时,浏览器会自动将Cookie随请求一起发送回服务器。 3. **查看Cookie**:...
- **读取Cookie**:在服务器端,使用`HttpServletRequest`的`getCookies()`方法获取所有Cookie。如果不存在任何Cookie,该方法返回null。可以通过循环遍历并比较Cookie的名称来找到特定的Cookie。 ```java ...
当在控制器类或具体方法上添加此注解时,Spring Boot会自动处理对应的跨域请求。例如: ```java @RestController @CrossOrigin(origins = "http://www.example.com", maxAge = 3600) @RequestMapping("/api") ...
一旦设置好,可以通过`response.addCookie(Cookie cookie)`将Cookie添加到响应中。 举个例子,假设我们有一个Servlet处理 `/testCookie` 请求,当`option`参数为`add`时,Servlet创建并设置一个名为`cool`、值为`...
2. **添加Cookie到响应**: 创建完Cookie后,需要将其添加到HttpServletResponse对象中,以便服务器能够将Cookie发送到客户端。CookieUtils可能有一个类似`addCookie(HttpServletResponse response, Cookie cookie)`...
CORS通过在HTTP响应头中添加以下字段来实现跨域: - `Access-Control-Allow-Origin`: 定义了哪些源可以访问资源,可以设置为特定的域名或通配符`*`。 - `Access-Control-Allow-Methods`: 允许的HTTP请求方法,如`...
使用 CORS 来解决跨域问题非常简单,我们只需要在 SpringBoot 项目中添加一个过滤器。下面是一个简单的示例代码: ```java @WebFilter @Component public class CorsFilter implements Filter { @Override ...
if ("OPTIONS".equalsIgnoreCase(((HttpServletRequest) servletRequest).getMethod())) { response.setStatus(HttpServletResponse.SC_OK); } else { filterChain.doFilter(servletRequest, servletResponse); ...
而在`doOptions`中,我们除了设置相同的响应头外,还添加了`Access-Control-Allow-Credentials`,表明这个接口不支持携带cookie的请求,因为`*`意味着不允许携带凭证。 注意,设置`Access-Control-Allow-Origin`为`...