java - Google App Engine 会话丢失属性
问题描述
我有一个存储会话授权详细信息的应用程序,它已经工作了多年,现在会话属性返回 null。我在每个请求开始时检索会话数据,并在返回响应之前设置它。该应用程序是在 GAE 标准上运行的 Spring 3 MVC。
会话已启用,<sessions-enabled>true</sessions-enabled>
. 我所有的对象都实现了可序列化。更新- 在检查项目历史时,我最近升级到 Java 8。我恢复到 Java 7,并且会话在设置后仍然返回 null 属性。设置回 Java 8。
protected void setSessionAccess(HttpServletRequest request, Access access) {
logger.info("setting session access...");
request.getSession().setAttribute(ACCESS, access);
}
protected Access getSessionAccess(HttpServletRequest request) {
logger.info("getting session access...");
Access access = (Access) request.getSession().getAttribute(ACCESS);
if (access == null) {
logger.log(Level.WARNING, "access is null, initializing access...");
access = new Access();
}
return access;
}
在进行故障排除时,我添加<async-session-persistence enabled="true" />
并删除了它,因为会话数据也用于导航目的。
更新- 用户报告他们能够与某些浏览器/平台而不是其他浏览器/平台保持会话,这让我相信这是与 cookie 相关的。当我禁用会话 cookie 时,我可以重复该问题。URL 重写会解决这个问题,但为什么会突然中断呢?
任何帮助是极大的赞赏!
解决方案
可能与我在 Python/Flask 中开发无关,但由于我错误地将应用程序“密钥”设置为在每个实例上随机生成的东西,我正在失去我的会话。这意味着当用户从一个实例转移到另一个实例时,会话无法被访问,因为每个实例都有不同的密钥来签署 cookie/会话。
推荐阅读
- python - 使第二列的数据停留在第二列
- javascript - HTML Canvas 从数据库中绘制图像
- java - 我的代码运行了 15 分钟但只有白色输出?
- python-3.x - 在 Pandas 数据框中查找在列子集上具有相同值的行子集(N 行)
- javascript - 第二次使用后显示“未定义”的警报框
- python - 如何部分读取文本文件并将片段写入另一个文本文件
- sql - 如何获取日历的日期作为标题并从数据库中获取相关记录
- swift - 当文本包含返回时滚动到 UITextView 的末尾
- java - 更改微调器项目数据时更新recyclerview单行数据
- java - 由于@OneToMany,JPA 更新记录失败