在ASP.Net MVC中何时使用TempData与Session?

 2023-02-17    373  

问题描述

我试图让mvc框架挂起,所以跟我忍受.

现在,唯一的是我正在使用的会话商店用于存储登录用户的当前.我的网站很简单.对于此示例,请考虑三个域对象,人员,会议和文件.用户可以登录并查看会议的”仅成员”配置文件,并可以将文件添加到它,或者如果未登录,则可以查看会议的公共”配置文件”.

在ASP.Net MVC中何时使用TempData与Session?

因此,从会议的私人资料,在登录用户中,我有一个”添加文件”链接.此链接路由到FileContoller.add(Int MeetingId).从此操作中,我会遇到用户想要添加文件要使用会议ID,但在发布表单后,我仍然需要知道哪个会议用户将文件添加到.这就是我的问题所在的地方,如果我通过TempData将”目前与”会议相遇,或将其添加到会话商店?

这是我目前具有添加动作设置的方式,但它不起作用:

public ActionResult Add(int meetingId)
    {
        try
        {
            var meeting = _meetingsRepository.GetById(meetingId);
            ViewData.Model = meeting;
            TempData[TempDataKeys.CurrentMeeting] = meeting; /* add to tempdata here */
        }
        catch (Exception)
        {
            TempData[TempDataKeys.ErrorMessage] = "Unable to add files to this meeting.";
            return RedirectToRoute("MeetingsIndex");
        }

        return View();
    }

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Add(FormCollection form)
    {
        var member = Session[SessionStateKeys.Member] as Member;
        var meeting = TempData[TempDataKeys.CurrentMeeting] as Meeting; /* meeting ends up null here */

        if (member == null)
        {
            TempData[TempDataKeys.ErrorMessage] = "You must be logged in to add files to an meeting.";
            return RedirectToRoute("LoginPage");
        }

        if (meeting == null) 
        {
            TempData[TempDataKeys.ErrorMessage] = "An error occurred. No meeting selected.";
            return RedirectToRoute("MeetingsIndex");
        }

            // add files to meeting

        TempData[TempDataKeys.Notification] = "Successfully added.";
        return RedirectToRoute("AddFiles", new {meetingId = meeting.MeetingId});
}

编辑:

基于大部分答案,任何一个人都可以在Tempdata VS会话中提供什么样的数据(邮件)的任何示例?

推荐答案

tempdata是会话,因此它们并不完全不同.但是,区分易于理解,因为 tempdata仅用于重定向,并仅重定向.因此,当您在Tempdata中设置一些消息然后重定向时,您将正确使用Tempdata.

但是,使用会话对于任何类型的安全性非常危险.会话和成员资格在ASP.NET中完全分开. 您可以”窃取”其他用户的会话,是的,人们通过这种方式攻击网站.因此,如果要根据用户登录,查看 isauthenticated ,如果要根据登录的类型的用户选择性地显示信息,则使用角色提供程序.因为可以缓存可以缓存,只有选择性地允许在get中访问动作的方式使用.

更新响应您的编辑问题:您已经有一个很好的例子,在您的问题中使用Tempdata,即,在失败的帖子后返回简单的错误消息.就 在会话中存储(超越”不多”)而言,我只是将会话视为特定于用户的缓存.与特定于用户特定的缓存一样,您不应将安全敏感的信息放在那里.但这是一个粘贴抬头相对昂贵的东西的好地方.例如,我们的网站上有用户的全名.存储在数据库中,我们不希望为我们服务的每个页面对其进行数据库查询. (安装我们的应用程序的安装在单个公司中,因此用户的全名不被视为”安全敏感.”)所以如果您认为会话作为缓存,则会通过用户拥有的cookie变化,因此您赢得了”太错了.

其他推荐答案

默认的tempdata提供程序使用会话,因此实际上并不大大区分,除了在下次请求结束时清除了Qupdata.当数据需要仅在两个请求之间持续到持续时,您应该使用TempData,优选地,第二个是重定向以避免来自用户的其他请求 – 例如 – 意外地删除数据.如果数据需要持续时间超过那么长,则应重新填充Tempdata或直接使用会话.

其他推荐答案

您可以根据您的要求使用它.澄清可以是

tempdata vs session

tempdata

  1. tempdata允许我们持续到单一后续请求的持续时间.
  2. ASP.NET MVC将自动过期Tempdata的值一旦连续请求返回结果(它意味着,只有在完全加载目标视图之前才会激活它).
  3. 它仅适用于当前和后续请求
  4. tempdata将保留方法保留tempdata的值.

    示例:

    tempdata.keep(),tempdata.keep(“empname”)

  5. tempdata内部存储了会话变量的值.

  6. 它用于仅存储一个时间消息,如验证消息,错误消息等.

session:

  1. 会话能够更长时间存储数据,直到用户会话未到期.
  2. 会话将在会话超时发生后过期.
  3. 对所有请求有效.
  4. n/a
  5. 会话变色存储在sessionstateItemcollection对象中(通过页面的HttpContext.session属性公开).
  6. 它用于存储在用户id,角色ID等中存储的长寿命数据.

tempdata和会话,都需要键盘,用于获取数据并检查空值以避免运行时间异常.

以上所述是小编给大家介绍的在ASP.Net MVC中何时使用TempData与Session?,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!

原文链接:https://77isp.com/post/34250.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。