.net mvc (MySQL) 上的 sessionState 问题

Posted

技术标签:

【中文标题】.net mvc (MySQL) 上的 sessionState 问题【英文标题】:sessionState problem at .net mvc (MySQL) 【发布时间】:2011-08-19 23:15:59 【问题描述】:

有下一个问题:我设置了自定义会话状态服务器(在 mysql 中存储会话)。但是会话数据没有添加到数据库中(默认的 .net 会话表为空),但授权有效(!)。如果我将 coockieless 选项更改为 true,会话数据开始添加到数据库中(但我不想使用 coockieless=true)。

有时我认为框架选择使用什么:inproc 或我的自定义存储...

我的配置:

<sessionState mode="Custom" cookieless="false" timeout="20" customProvider="MySqlSessionStateStore">
      <providers>
        <add name="MySqlSessionStateStore" type="MySql.Web.SessionState.MySqlSessionStateStore, MySql.Web, Version=6.3.6.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" applicationName="/" description="" connectionStringName="MySqlMembershipConnection" writeExceptionsToEventLog="False" autogenerateschema="True" />
      </providers>
    </sessionState>
    <authentication mode="Forms">
      <forms loginUrl="~/Account/LogOn" timeout="2880" />
    </authentication>
    <membership defaultProvider="MySqlMembershipProvider">
      <providers>
        <clear />
        <add name="MySqlMembershipProvider" type="MySql.Web.Security.MySQLMembershipProvider, MySql.Web, Version=6.3.6.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" applicationName="/" description="MySQL default application" connectionStringName="MySqlMembershipConnection" writeExceptionsToEventLog="False" autogenerateschema="True" enablePasswordRetrieval="False" enablePasswordReset="True" requiresQuestionAndAnswer="False" requiresUniqueEmail="True" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" passwordStrengthRegularExpression="" />
      </providers>
    </membership>
    <profile defaultProvider="MySqlProfileProvider">
      <providers>
        <clear />
        <add name="MySqlProfileProvider" type="MySql.Web.Profile.MySQLProfileProvider, MySql.Web, Version=6.3.6.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" applicationName="/" description="" connectionStringName="MySqlMembershipConnection" writeExceptionsToEventLog="False" autogenerateschema="True" />
      </providers>
    </profile>
    <roleManager enabled="true" defaultProvider="MySqlRoleProvider">
      <providers>
        <clear />
        <add name="MySqlRoleProvider" type="MySql.Web.Security.MySQLRoleProvider, MySql.Web, Version=6.3.6.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" applicationName="/" description="" connectionStringName="MySqlMembershipConnection" writeExceptionsToEventLog="False" autogenerateschema="True" />
      </providers>
    </roleManager>
    <connectionStrings>
    <add name="photostorageEntities" connectionString="metadata=res://*/Models.Photos.csdl|res://*/Models.Photos.ssdl|res://*/Models.Photos.msl;provider=MySql.Data.MySqlClient;provider connection string=&quot;server=ip;User Id=user;password=pass;Persist Security Info=True;database=photostorage; Charset=utf8&quot;" providerName="System.Data.EntityClient" />
    <add name="MySqlMembershipConnection" connectionString="Data Source=ip;userid=user;password=pass;database=photostorage;Charset=utf8" providerName="MySql.Data.MySqlClient" />
  </connectionStrings>

【问题讨论】:

您的代码看起来正确。日志说什么?尝试设置 writeExceptionsToEventLog="true" 并检查这些。 dev.mysql.com/doc/refman/5.1/en/… 的指南建议更改一些 machine.config 值,而不是在 web.config 中进行。不过,我不太了解那个图书馆——我不确定这是否重要。你试过吗? 【参考方案1】:

修复了使用单独的会话连接字符串(我不知道为什么它不能以其他方式工作)

【讨论】:

以上是关于.net mvc (MySQL) 上的 sessionState 问题的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET MVC Web App 从 MySQL 数据库中获取不完整的数据

CultureInfo:海地克里奥尔语和 ASP.NET/MVC 上的 .NET 3.5?

ASP.NET开发实战——ASP.NET MVC 与数据库之MySQL

.NET MVC 3,自动生成/映射模型模式到 Mysql?

深入理解 ASP.NET MVC 上的 async/await

ASP.NET MVC EF 和 MySQL