Asp.net mvc 在会话变量中保存每个用户的utc偏移量,并在用户移动到另一时区或会话过期时刷新它

Asp.net mvc 在会话变量中保存每个用户的utc偏移量,并在用户移动到另一时区或会话过期时刷新它,asp.net-mvc,session,session-variables,utc,timezone-offset,Asp.net Mvc,Session,Session Variables,Utc,Timezone Offset,我正在一个页面上构建一个30天的日历(只有登录的用户才能访问)。 此页面通过此url访问,我无法传递任何其他参数,如日期或utc偏移量 www.mysite.com/controller/calendar/id 我已经根据给我的规格在页面上创建了一个日历。 我在服务器上获取日历数据的方法是从当天开始,一直到接下来的30天。为了做到这一点,我需要每个用户的UTC偏移量,以确保我得到的是他们的本地当前日期,而不是服务器上的本地日期(UTC) 解决方案和问题-我通过在用户登录站点时保存utc偏移量并将

我正在一个页面上构建一个30天的日历(只有登录的用户才能访问)。 此页面通过此url访问,我无法传递任何其他参数,如日期或utc偏移量

www.mysite.com/controller/calendar/id

我已经根据给我的规格在页面上创建了一个日历。 我在服务器上获取日历数据的方法是从当天开始,一直到接下来的30天。为了做到这一点,我需要每个用户的UTC偏移量,以确保我得到的是他们的本地当前日期,而不是服务器上的本地日期(UTC)

解决方案和问题-我通过在用户登录站点时保存utc偏移量并将其保存在会话变量中(如下所示)部分解决了此问题-

System.Web.HttpContext.Current.Session[“UtcOffset”]=100

现在我面临两个问题-

  • 会话将过期
  • 乘坐航班或驾驶并改变时区的用户(utc偏移)
  • 我知道一个解决方案是为数据库中的每个用户保存utc偏移量,这样,如果会话过期,我可以查看数据库值——不知道这是否是一个好的解决方案?我担心的是,用户是否在没有使用笔记本电脑登录网站的情况下乘坐航班并更改utc偏移量

    我知道ajax调用getch数据并传入utc是可行的,但我正试图通过一个get调用来实现这一点

    使会话变量永不过期是个坏主意吗?我是否应该担心这样做


    非常感谢您的建议?

    您能否在每次访问服务器时刷新/更新您的用户会话?因此,每当用户刷新页面时,其Utc都会发生变化。无论如何,永久会话不是一个好主意,您可能会在服务器中遇到数千个非活动用户会话(取决于用户数量)。您是否尝试过使用本地存储?这不是敏感数据,所以你可以在那里存储偏移量。您不必担心到db的额外往返或会话过期。您是否考虑过使用一些自定义HTTP头,假设您以后可以从服务器访问它?您可以使用它来传递浏览器的时区。