0

我问这个的原因是最近设计了一个应用程序,最初想不使用会话状态来保持简单,但最终屈服于使用会话状态来存储状态的想法。我知道迁移到网络场解决方案将涉及配置会话状态以在 sql 中运行。但是,我从未遇到任何解释序列化是必要的信息。所以不,我需要重构代码来实现这一点。

此外,我使用 linq to sql 给我数据对象。理想情况下,这很容易序列化,但似乎不是直截了当。

我用谷歌搜索过,这样做应该没问题。问题不是如何序列化 linq 数据类,而是:

会话状态是前进的方向吗,特别是在网络场上设计可扩展应用程序时,我们是否应该使用其他方法,在使用 linq 进行数据访问时推荐什么,我们是否应该使用查询字符串等。

谢谢

4

1 回答 1

1

有很多(真的)方法可以做到这一点

存储会话状态是许多网络农场/应用程序的基本要求。您可以使用 LINQ->SQL 将其存储在数据库中,也可以使用 SAN 上的平面文件。只要您有某种方法可以从存储格式序列化为本地语言格式,这真的没关系(除了从性能角度来看)。

在 PHP 中,会话处理程序以字符串的形式映射到会话表。在 Python 中,您可能会将一个对象编组为一个字符串并存储它。

我会推荐以任何形式访问的 SQL 后端,因为 RDBMS 是为并发访问而设计的,因此您无需担心锁定等问题。它的扩展性和RDBMS 一样好

你可以使用像 SQL Alchemy 这样的东西

Session = sqlalchemy.orm.sessionmaker() session = Session()

来自 http://www.darrellhawley.com/2009/01/sql-alchemy-orm-b​​asics.html

或者在这里

http://idunno.org/articles/277.aspx

或者这个来自 Microsoft 的 HOWTO 称为“如何:配置 SQL Server 以存储 ASP.NET 会话状态”可能会有所帮助

http://support.microsoft.com/kb/317604

哪个提供

<sessionState 
    mode="SQLServer"
    sqlConnectionString="data source=127.0.0.1;user id=<username>;password=<strongpassword>"
    cookieless="false" 
        timeout="20" 
/>

如果不查看您的应用程序需求,则无法确定是否需要会话状态。但归根结底,状态就是状态,访问该状态的要求(读取繁重、写入繁重、大、小等等)决定了您如何存储它以及以什么格式存储它。

我会推荐在类似 hashmap 的对象到 SQL 表之间的 ORM 映射或 hashmap 的序列化,这样

session = load_from_sql(session_id)
someval = session['var']

将值保存为字符串或原生对象取决于您选择的 ORM、您的语言是否容易等等。性能也是一个因素,以及数据库占用空间。您可能会发现存储简单变量字符串和按需解组更简单。您可以存储 JSON 类型,然后将它们转换为本机。

很多要考虑...

SQL 可能是最简单的,无论是 ORM->session_object 还是映射到哈希表的一组元组。

祝你好运

于 2009-06-02T21:26:16.977 回答