Tag: session

如何在Java Servlet中有效地破坏’session’?

我工作的Servlet有一个变量session 。 我试过session.invalidate(); ,这似乎已经破坏了会话,但是当我进行重定向时,如此response.sendRedirect(“restanes.jsp”); ,它为此行提供了HTTP Status 500错误: java.lang.IllegalStateException: getAttribute: Session already invalidated 这是因为我试图破坏会话。 但为什么页面无法重定向? 在其他地方的同一页上,我已成功重定向。 如何成功销毁会话和重定向? 代码段: if(request.getParameter(“logout”) != null ){ session.invalidate(); response.sendRedirect(“restanes.jsp”); } 更新:我需要做的就是return; 在response.sendRedirect(“restanes.jsp”); 。 衷心感谢BalusC 。

Hibernate将对象保存到多个会话

我试图使用hibernate写入多个数据库。 我在单个会话对象中封装了写入和读取/写入会话。 但是,当我去保存时,我收到很多错误,表明对象已经与另一个会话相关联:“非法尝试将集合与两个打开的会话相关联” 这是我的代码: public class MultiSessionObject implements Session { private Session writeOnlySession; private Session readWriteSession; @Override public void saveOrUpdate(Object arg0) throws HibernateException { readWriteSession.saveOrUpdate(arg0); writeOnlySession.saveOrUpdate(arg0); } } 我试过驱逐物体并冲洗; 但是,这会导致“Row被另一个事务更新或删除”的问题……即使两个会话都指向不同的数据库。 public class MultiSessionObject implements Session { private Session writeOnlySession; private Session readWriteSession; @Override public void saveOrUpdate(Object arg0) throws HibernateException { readWriteSession.saveOrUpdate(arg0); readWriteSession.flush(); readWriteSession.evict(arg0); writeOnlySession.saveOrUpdate(arg0); writeOnlySession.flush(); […]

Tomcat如何在内部处理会话?

根据我的理解,Servlet Containers使用一些HTTP协议来处理会话,比如 隐藏的表单字段 URL重写 cookies 我很好奇Apache Tomcat如何在内部处理会话,尽管它与普通开发人员无关。 Tomcat是否也使用cookie或其他?

当请求来自Web服务器而不是Web浏览器时,HTTPSession的创建如何工作?

我有一个非常基本的问题,如何创建HTTPSession。我知道你们会因为存在类似的问题而解雇这个问题。但是有理由说我为什么要问这个问题这里是: – 我知道httpsession是Web浏览器所独有的,当我们第一次执行HttpServletRequest.getSession时,服务器会创建它。它将保持相同的会话,直到我们关闭浏览器。 但我有一点点不同的场景。我在一个tomcat实例上有一个Web应用程序说T1.On这个Web应用程序的欢迎页面我已经提供了两个链接,点击它带我到不同的Web应用程序托管的相同的java servlet(S1)在另一个tomcat实例T2上(这两个链接打开两个单独的弹出窗口)。 现在我首先点击link1并检查S1中的sessionId并找到它的值为1678.现在我首先点击link2并检查S1中的sessionId并再次找到它的值为1678. 我的问题是为什么我得到相同的会话来自link1和link2的请求的id? 我该怎么做才能获得这两个请求的不同会话? 在网上寻找可能的解决方案后我尝试了什么: –点击link1,在Servlet S1中,我复制了会话属性,使其无效并创建新的属性。 说新的会话ID是8765。 现在我点击link2并在此请求中找到相同的会话。 所以我进一步使它失效并创建一个新的(比如新的会话ID是4897)。 理想情况下,它应该到期第一个浏览器会话(单击link1时生成)。 为了validation它,我点击弹出的任何地方1它没有过期,但我再次看到最后生成的会话ID,即4897.我不知道为什么它与两个弹出窗口附加相同的会话ID? 感谢您耐心等待您的时间并阅读这个漫长的场景? 编辑: – Cookie[] cookies = req.getCookies(); if(cookies!=null) for (int i = 0; i < cookies.length; i++) { cookies[i].setMaxAge(0); context.getResponse().getHttpServletResponse().addCookie(cookies[i]); } HttpSession myAppSession = req.getSession();//line 1 假设点击link1我得到会话ID为1234,然后点击链接2后我也得到相同的会话ID。 根据我的理解,在执行第1行上面的代码后,我应该获得不同的会话ID,因为我在获取会话之前将MaxAge设置为0。 但它没有发生?

在spring mvc中删除url重写中的jsessionid

我正在使用spring MVC并且在jsessionid中遇到问题,我发现如果在浏览器中没有启用cookie,则会在URL中注入jsessionid,生成类似这样的URL: HTTP://本地主机/类别; JSESSIONID = Bsls4aQFXA5RUDcmZKV5iw CID = 13001? 实际上浏览器没有问题,但是当Google抓取我的网站时,Google抓取工具似乎没有Cookie :),他们会以该格式存储我网站的url,而我的网站会显示在搜索结果中,其url就像包含jsessionid的url一样。 实际上它运行没有任何问题,但我更喜欢在没有jsessionid的情况下将url显示在Google搜索结果中。 有帮助吗?

如何在浏览器上永久保存一些值?

我有一些登录信息,比如用户名,登录电子邮件ID和位置。 我希望即使在用户注销并关闭窗口后,也要在浏览器中保留此信息。 这样,当用户在注销或会话到期后返回时,Web应用程序将填充客户端用户名并向用户请求密码。 我要求的最好例子是谷歌登录。!! 目前我只使用会话而没有cookie。 有哪些可能的解决方案?

抢先并优雅地检查org.hibernate.Session是否仍然连接(通过c3p0)

我在多分类数据库环境中工作,其中分片的停机时间不是致命的。 当应用程序启动时,所有分片信息都会加载到缓存中并加载相应的Session对象,但是,在应用程序正常运行期间,预计某些分片可能会关闭,在这种情况下,应用程序会故障转移到剩余的分片之一碎片。 它几乎是一个标准的用例场景。 在某些情况下,我需要进行交叉分片扫描,我这样做的方法是遍历上述会话映射并检索数据。 当我的Hibernate会话到一个同时因为会话打开而失败的数据库时,问题出现了。 我希望有一种先发制人的方法来检查数据库是否已关闭而不尝试事务并获取org.hibernate.exception.GenericJDBCException ,这是我现在发现它的方式,但这很糟糕,因为它是运行时exception,在所有其他邪恶中。 我还尝试了Session.isOpen()和Session.isConnected()但即使数据库关闭,这两种方法都返回true。 有没有办法先发制人地优雅地检查Hibernate Session的连接? 像向数据库发送ping一样的东西。 也值得知道我们使用c3p0进行连接池。 有没有办法可以配置它来告诉Hibernate连接断开并关闭/断开相关会话?

如何修复hibernate警告(HHH000470)?

有时,我得到这个警告信息: aug 09,2017 3:40:02 AM org.hibernate.collection.internal.AbstractPersistentCollection setCurrentSession 警告:HHH000470:为集合定义了意外会话,但该集合未连接到该会话。 持久集合一次只能与一个会话相关联。 覆盖会话。 收集:[royaleserver.database.entity.PlayerEntity.homeChests#1757] PlayerEntity: public class PlayerEntity implements Identifiable, Serializable { … @OneToMany(mappedBy = “player”) private Set homeChests = new HashSet(); public Set getHomeChests() { return homeChests; } public PlayerEntity setHomeChests(Set homeChests) { this.homeChests = homeChests; return this; } } HomeChestEntity: public class HomeChestEntity implements Serializable { […]

Axis2会话管理

我在axis2中构建了一个小型web服务(但是,我编写java类并让eclipse wtp生成服务)。 我想使用会话,以便用户可以使用用户名登录并传递(如果它存在于数据库中),而不是使用webservice但在其会话的上下文中。 我坦率地说不知道从哪里开始。 我如何创建一个会话,然后再处理它?

如果他再次在相同或不同的浏览器上登录,如何注销用户的上一个会话

我有一个查询,我希望如果用户已经登录到网页并再次从相同或不同的机器重新登录,那么他的上一个会话应该被杀死并自动登录到主页面。 我在客户端使用jquery,在后端使用servlet。 我使用tomcat 6作为web服务器和jdk1.6编译器。 我只是想像雅虎那样,如果用户从某台机器进入并且下次再次从其他机器或同一台机器登录时,他会从previos会话自动注销并重定向到主页面。 请告诉我该如何实现。