前言:设置cookie时,使用以下代码我通过127.0.0.1访问系统时,一直拿不到cookie设置的值,由此引发了一系列的基础知识学习。
/**
* 设置Cookie的值,并使其在指定时间内生效
*
* @param cookieMaxage cookie生效的最大秒数
*/
private static final void doSetCookie(HttpServletRequest request, HttpServletResponse response,
String cookieName, String cookieValue, int cookieMaxage, String encodeString) {
try {
if (cookieValue == null) {
cookieValue = "";
} else {
cookieValue = URLEncoder.encode(cookieValue, encodeString);
}
Cookie cookie = new Cookie(cookieName, cookieValue);
if (cookieMaxage > 0) {
cookie.setMaxAge(cookieMaxage);
}
/*
* 正常的Cookie只能在一个应用中访问,即cookie只能由创建他的应用访问要实现跨应用访问cookie或者跨域访问cookie就得使用到cookie的setPath()和setDomain()方法。
1.同一服务器内的cookie共享方法:setPath()
2.跨域共享cookie的方法:setDomain()
*/
if (null != request) {// 设置域名的cookie
String domainName = getDomainName(request);
System.out.println(domainName);
if (!"localhost".equals(domainName)) {
cookie.setDomain(domainName);
}
}
cookie.setPath("/");
response.addCookie(cookie);
} catch (Exception e) {
e.printStackTrace();
}
}
1.可在同一应用服务器内共享方法:设置cookie.setPath(“/”);
本机tomcat/webapp下面有两个应用:cas和webapp_b,
- 1)原来在cas下面设置的cookie,在webapp_b下面获取不到,path默认是产生cookie的应用的路径。
- 2)若在cas下面设置cookie的时候,增加一条cookie.setPath(“/”);或者cookie.setPath(“/webapp_b/”);就可以在webapp_b下面获取到cas设置的cookie了。
- 3)此处的参数,是相对于应用服务器存放应用的文件夹的根目录而言的(比如tomcat下面的webapp),因此cookie.setPath(“/”);之后,可以在webapp文件夹下的所有应用共享cookie,而cookie.setPath(“/webapp_b/”);是指cas应用设置的cookie只能在webapp_b应用下的获得,即便是产生这个cookie的cas应用也不可以。
- 4)设置cookie.setPath(“/webapp_b/jsp”)或者cookie.setPath(“/webapp_b/jsp/”)的时候,只有在webapp_b/jsp下面可以获得cookie,在webapp_b下面但是在jsp文件夹外的都不能获得cookie。
- 5)设置cookie.setPath(“/webapp_b”);,是指在webapp_b下面才可以使用cookie,这样就不可以在产生cookie的应用cas下面获取cookie了
- 6)有多条cookie.setPath(“XXX”);语句的时候,起作用的以最后一条为准。
- 6)设置多个path的方法???
2.跨域共享cookie的方法:设置cookie.setDomain(“.jszx.com”);
A机所在的域:home.langchao.com,A有应用cas
B机所在的域:jszx.com,B有应用webapp_b
- 1)在cas下面设置cookie的时候,增加cookie.setDomain(“.jszx.com”);,这样在webapp_b下面就可以取到cookie。
- 2)这个参数必须以“.”开始。
- 3)输入url访问webapp_b的时候,必须输入域名才能解析。比如说在A机器输入:http://lc–bsp.jszx.com:8080/webapp_b,可以获取cas在客户端设置的cookie,而B机器访问本机的应用,输入:http://localhost:8080/webapp_b则不可以获得cookie。
- 4)设置了cookie.setDomain(“.jszx.com”);,还可以在默认的home.langchao.com下面共享。
-
1)原理不同
-
2)概念不同
-
3)指向不同
-
- 整个127.* 网段通常被用作 loopback 网络接口的默认地址,按惯例通常设置为 127.0.0.1。这个地址在其他计算机上不能访问,就算你想访问,访问的也是自己,因为每台带有TCP/IP协议栈的设备基本上都有 localhost/127.0.0.1。
- 本机地址通常指的是绑定在物理或虚拟网络接口上的IP地址,可供其他设备访问到。
最后从开发度来看,localhost是个域名,性质跟 “www.baidu.com” 差不多。不能直接绑定套接字,必须先gethostbyname转成IP才能绑定。 - 127.0.0.1 是绑定在 loopback 接口上的地址,如果服务端套接字绑定在它上面,你的客户端程序就只能在本机访问。
原文地址:https://blog.csdn.net/qq_42836388/article/details/127297670
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_22192.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
主题授权提示:请在后台主题设置-主题授权-激活主题的正版授权,授权购买:RiTheme官网
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。