记一次无法登录tomcat部署的wepapp页面,用户密码都是对的,验证码也是输入正确,但是页面报错提示是验证码不正确。用
火狐开发工具
查看出现以下报错
由于非 HTTPS Cookie 无法设置“secure”属性,已拒绝 Cookie “JSESSIONID”。
解决办法:
查看tomcat配置文件,发现自己
启用了cookie的HttpOnly属性,接下来就把他关闭掉。
1、修改$CATALINA_HOME/conf/context.xml,把<Context useHttpOnly="true">,改为<Context useHttpOnly="false">
2、在$CATALINA_HOME/conf/web.xml中sesion-config节点找到以下配置,(此配置只允许cookie在加密方式下传输。)
<session-config>
<session-timeout>30</session-timeout>
<cookie-config>
<secure>true</secure>
</cookie-config>
</session-config>
<session-config>
<session-timeout>30</session-timeout>
</session-config>
30为时间,单位是分钟。
3、重启tomcat
记一次无法登录tomcat部署的wepapp页面,用户密码都是对的,验证码也是输入正确,但是页面报错提示是验证码不正确。用火狐开发工具查看出现以下报错由于非 HTTPS Cookie 无法设置“secure”属性,已拒绝 Cookie “JSESSIONID”。解决办法:查看tomcat配置文件,发现自己启用了cookie的HttpOnly属性,接下来就把他关闭掉。1、修改$CATALINA_HOME/conf/context.xml,把<Context useHttpOnly="
在网上找资料,都是说
cookie
如果
设置
了
secu
re=true,那么在
http
请求的时候,这个
cookie
就不会往后端传递。为了验证这个说法,我自己用springboot搭了一个简单程序,写了一个接口做测试,接口代码如下,很简单
@RequestMapping("/demo")
@RestController
public class DemoController {
@GetMapping("/hello")
public ResultVO hello(
HttpS
ervletReq
尝试通过Set-
Cookie
标头
设置
Cookie
时被阻止,因为它具有“
Secu
re"
属性
,但未通过安全连接发送问题:原因:解决
浏览器端
cookie
就是没有
设置
成功, 后来注意到header的Set-
Cookie
:参数后面有带着
secu
re的
属性
尝试通过Set-
Cookie
标头
设置
Cookie
时被阻止,因为它具有“
Secu
re"
属性
,但未通过安全连接发送
This attempt to set a
cookie
via a Set-
Cookie
header was blocked bec
cookie
无法
设置
问题记录
项目中遇到了一个
cookie
无法
设置
的问题,大佬排查之后,找出原因如下:
当前服务器下不同端口有另外一个项目,并且存储
cookie
名称与我项目相同。
正常来说,我项目登录后会直接将另外一个项目
cookie
覆盖掉,这样使用时还是正常的。
但是由于另外一个项目是
https
的,
cookie
中有一个
secu
re
属性
被
设置
为true,此时,
非
https
的我的项目
cookie
就
无法
覆盖
https
设置
的带有
secu
re
属性
的
cookie
,导致项目
无法
登录
一、
属性
说明:
1
secu
re
属性
当
设置
为true时,表示创建的
Cookie
会被以安全的形式向服务器传输,也就是只能在
HTTPS
连接中被浏览器传递到服务器端进行会话验证,如果是
HTTP
连接则不会传递该信息,所以不会被窃取到
Cookie
的具体内容。
2
Http
Only
属性
如果在
Cookie
中
设置
了"
Http
Only"
属性
,那么通过程序(JS脚本、Applet等)将
无法
读...
客户网站出现了问题, 经查看是
cookie
里面的参数没有传送到后台, 看header后台又有发送设定
cookie
的header,
但是浏览器端
cookie
就是没有
设置
成功, 后来注意到header的Set-
Cookie
:参数后面有带着
secu
re的
属性
, 搜索后知道,
设置
了
secu
re
属性
的
cookie
只能用
https
协议发送给服务器, 而当时客户的网站是
http
的, 导致了服务...
一.服务器端获取Session对象依赖于客户端携带的
Cookie
中的
JSESSIONID
数据。如果用户把浏览器的隐私级别调到最高,这时浏览器是不会接受
Cookie
、这样导致永远在服务器端都拿不到的
JSESSIONID
信息。这样就导致服务器端的Session使用不了。
Java
针对
Cookie
禁用,给出了解决方案,依然可以保证
JSESSIONID
的传输。
Java
中给出了再所有的路径的后面拼接
JSESSIONID
信息。
在 Session1Servlet中,使用response.encodeURL(url) 对超链接路径拼接 session的唯一标识
// 当点击 的时候跳转到 sess
Java
中可以使用Servlet API中的
HttpS
ession对象来实现把session放在
cookie
中。具体步骤如下:
1.在Servlet中获取
HttpS
ession对象:
HttpS
ession session = request.getSession();
2.将数据存入Session中:
session.setAttribute("name", "value");
3.获取Session ID并将其存储在
Cookie
中:
Cookie
cookie
= new
Cookie
("
JSESSIONID
", session.getId());
response.add
Cookie
(
cookie
);
通过这种方式,将Session ID存储在客户端的
Cookie
中,客户端每次请求都会携带该
Cookie
,从而实现了Session的持久化。