标签: httpsession

Spring 3 MVC从控制器访问HttpRequest

我想自己处理请求和会话属性,而不是将其留给spring @SessionAttributes,例如登录cookie处理.

我只是无法弄清楚如何HttpRequest在控制器中访问from,我需要一种方法去上面一层@RequestAttribute并访问它HttpRequest自己.使用Stripes来实现ApplicationContext和调用getAttribute().

此外,传递HttpServletRequestas参数似乎不起作用:

@RequestMapping(value="/") public String home(HttpServletRequest request){
    System.out.println(""+request.getSession().getCreationTime());
    return "home"; 
}
Run Code Online (Sandbox Code Playgroud)

上述方法不打印任何内容.

你对此有什么建议吗?

spring-mvc httprequest httpsession request-mapping

93
推荐指数
3
解决办法
23万
查看次数

如何在JSF 2.0中使会话无效?

在JSF 2.0应用程序中使会话无效的最佳方法是什么?我知道JSF本身不会处理会话.到目前为止我能找到

private void reset() {
    HttpSession session = (HttpSession) FacesContext.getCurrentInstance()
            .getExternalContext().getSession(false);
    session.invalidate();
}
Run Code Online (Sandbox Code Playgroud)
  1. 这种方法是否正确?有没有办法没有触及ServletAPI?
  2. 考虑一种方案,其中@SessionScopedUserBean处理用户的登录注销.我在同一个bean中有这个方法.现在,当我reset()完成必要的数据库更新后调用该方法时,我当前的会话作用域bean会发生什么?既然豆本身也存放在HttpSession

session session-scope httpsession jsf-2 managed-bean

58
推荐指数
2
解决办法
8万
查看次数

如何获取Web应用程序中所有HttpSession对象的列表?

假设我有一个运行的基于Java的Web应用程序,其中包含0个或更多HttpSession与之关联的有效对象.我想要一种方法来访问当前的有效HttpSession对象列表.我在想我可以实现一个HttpSessionListener并使用它来追加存储在应用程序范围的属性中的会话ID值列表,但随后会因会话失效而更新列表并且谁知道是什么其他.

在我开始烘焙自己的解决方案之前,我想我应该问一个问题:
servlet API是否提供了一些访问完整的非失效会话对象列表的方法?

我使用Tomcat 6.x作为我的Web应用程序容器和MyFaces 1.2.x(JSF)库.

解决方案
我遵循类似于BalusC在这些现有问题中讨论的方法:

我按SessionData类修改了实现HttpSessionBindingListener.当绑定事件发生时,对象将从所有SessionData对象的集合中添加或删除自身.

@Override
public void valueBound(HttpSessionBindingEvent event) { 
    // Get my custom application-scoped attribute
    ApplicationData applicationData = getApplicationData();
    // Get the set of all SessionData objects and add myself to it
    Set<SessionData> activeSessions = applicationData.getActiveSessions();
    if (!activeSessions.contains(this)) {
        activeSessions.add(this);
    }
}

@Override
public void valueUnbound(HttpSessionBindingEvent event) {
    HttpSession session = event.getSession();
    ApplicationData applicationData = getApplicationData();
    Set<SessionData> activeSessions …
Run Code Online (Sandbox Code Playgroud)

java servlets web-applications httpsession

49
推荐指数
2
解决办法
7万
查看次数

如何在Spring MVC中存储会话

在Spring MVC(2.5)Web应用程序中存储用户的会话相关数据(例如,用户已执行的最近操作的日志)的最佳方法是什么?

使用经典的javax.servlet.http.HttpSession或在控制器bean中指定scope ="session",并将数据存储在会话对象中?

java spring-mvc httpsession

37
推荐指数
1
解决办法
4万
查看次数

如何在HttpSession中存储Java对象?

因此,当我请求此servlet时,我正在尝试使用servlet将Java对象添加到用户的会话中.但是在servlet重定向到下一页并尝试检索对象之后,我得到了一个null对象.

以下是我将对象添加到HttpSession(在servlet中)的操作:

request.setAttribute("object", obj);
Run Code Online (Sandbox Code Playgroud)

然后我尝试通过(在JSP中)检索它:

 Object obj = request.getAttribute("object");
Run Code Online (Sandbox Code Playgroud)

那么我如何让obj不为null?

更新:我也没试过这个:

HttpSession session = request.getSession();
session.setAttribute("object", obj);
Run Code Online (Sandbox Code Playgroud)

在JSP中有以下内容:

 Object obj = request.getSession().getAttribute("object");
Run Code Online (Sandbox Code Playgroud)

两种方式仍然返回null.

java jsp servlets httpsession

34
推荐指数
3
解决办法
17万
查看次数

在ASP.NET会话中存储任何内容会导致500毫秒延迟

问题:

在ASP.NET站点中使用会话时,几乎在同一时间加载多个请求时会导致严重的延迟(500毫秒的倍数).

更具体地说,我的问题

我们的网站专门为其SessionId使用会话.我们使用此密钥来查找具有用户信息等的db表.这似乎是一个很好的设计,因为它存储了最少的会话数据.不幸的是,如果你在会话中没有任何东西,SessionId会改变,所以我们存储Session["KeepId"] = 1;.这足以说服SessionId不要改变.

在一个看似无关的说明中,该网站通过控制器操作提供定制的产品图像.如果需要,此操作会生成图像,然后重定向到缓存的图像.这意味着一个网页可能包含图像或其他资源,通过ASP.NET管道发送数十个请求.

无论出于何种原因,当您(a)同时发送多个请求并且(b)以任何方式涉及会话时,您将最终获得大约1/2时间的随机500ms延迟.在某些情况下,这些延迟将是1000毫秒或更长,总是以~500毫秒的间隔增加.更多请求意味着更长的等待时间 对于某些图像,我们包含数十张图像的页面可能需要等待10秒以上.

如何重现问题:

  1. 创建一个空的ASP.NET MVC Web应用程序
  2. 创建一个空的控制器动作:

    public class HomeController : Controller
    {
      public ActionResult Test()
      {
        return new EmptyResult();
      }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 创建一个test.html页面,其中包含一些符合该操作的img标记:

    <img src="Home/Test?1" />
    <img src="Home/Test?2" />
    <img src="Home/Test?3" />
    <img src="Home/Test?4" />
    
    Run Code Online (Sandbox Code Playgroud)
  4. 运行页面并观察firebug中的快速加载时间:

    每张图片加载速度都相当快

  5. 执行以下操作之一(两者都具有相同的结果):

  6. 再次运行该页面并注意响应中的偶然/随机延迟.

    有些请求会遇到长时间延迟

我所知道的

  • 它发生在MVC 2&3和WebForms中
  • 它适用于任何浏览器(我们尝试过FF,Chrome,IE,Safari)
  • 无论是否附加调试器,都会发生这种情况 …

asp.net-mvc session webforms httpsession

34
推荐指数
2
解决办法
7597
查看次数

如何检查会话是否无效

如何检查会话是否无效?API中没有方法.

它是一样的isNew()吗?如果没有,有什么区别?

java session httpsession

30
推荐指数
2
解决办法
4万
查看次数

如何使用JSESSIONID手动加载Java会话?

我有一个处理多部分表单帖子的servlet.帖子实际上是由嵌入页面的Flash文件上传组件制作的.在某些浏览器中,Flash生成的POST不包含JSESSIONID,这使得我无法在帖子期间从会话中加载某些信息.

Flash上​​传组件确实包含特殊表单字段中的cookie和会话信息.使用此表单字段,我实际上可以检索JSESSIONID值.问题是,我不知道如何使用此JSESSIONID值手动加载该特定会话.

编辑 -基于ChssPly76的解决方案,我创建了以下HttpSessionListener实现:

    @Override
    public void sessionCreated(final HttpSessionEvent se) {
        final HttpSession session = se.getSession();
        final ServletContext context = session.getServletContext();
        context.setAttribute(session.getId(), session);
    }

    @Override
    public void sessionDestroyed(final HttpSessionEvent se) {
        final HttpSession session = se.getSession();
        final ServletContext context = session.getServletContext();
        context.removeAttribute(session.getId());
    }
Run Code Online (Sandbox Code Playgroud)

这会将所有会话添加到ServletContext,作为由其唯一ID映射的属性.我可以在上下文中放置一个会话映射,但它似乎是多余的.请发表有关此决定的任何想法.接下来,我将以下方法添加到我的servlet以通过id解析会话:

    private HttpSession getSession(final String sessionId) {
        final ServletContext context = getServletContext();
        final HttpSession session = (HttpSession) context.getAttribute(sessionId);
        return session;
    }
Run Code Online (Sandbox Code Playgroud)

java session servlets java-ee httpsession

29
推荐指数
1
解决办法
6万
查看次数

在当前HTTPContext中生成新的ASP.NET会话

由于对我们的一些产品进行了渗透测试,当时看起来很容易解决的"容易"问题变得非常棘手.

当然不应该这样,我的意思是,为什么只为当前HTTPContext这个难以产生一个全新的会话?离奇!无论如何 - 我写了一个厚脸皮的小实用工具类来"做它":

(代码格式化/突出显示/ Visual Basic道歉我必须做错事)


Imports System.Web
Imports System.Web.SessionState

Public Class SwitchSession

    Public Shared Sub SetNewSession(ByVal context As HttpContext)
        ' This value will hold the ID managers action to creating a response cookie
        Dim cookieAdded As Boolean
        ' We use the current session state as a template
        Dim state As HttpSessionState = context.Session
        ' We use the default ID manager to generate a new session id
        Dim idManager As New SessionIDManager() …
Run Code Online (Sandbox Code Playgroud)

asp.net session-state sessionid httpsession

26
推荐指数
2
解决办法
4万
查看次数

访问JSR-356 @ServerEndpoint的@OnMessage中的ServletContext和HttpSession

我需要ServletContext从内部获取@ServerEndpoint,以便找到Spring ApplicationContext并查找Bean.

目前我最好的方法是在JNDI命名上下文中绑定该bean并在其中查找它Endpoint.欢迎任何更好的解决方案.

我也在寻找一种合理的方法来将servlet HttpSession与websocket 同步Session.

servlets java-ee httpsession websocket java-websocket

26
推荐指数
2
解决办法
1万
查看次数