Session与Cookie在换了个数据库之后出现了失效问题,真TMD的摸不着头脑了
redv 2004-08-09 06:15:05 我开始开发的时候使用的是SQLServer来存储数据的,在用户登陆的时候使用了:
Session.Add(Config.GetUserSessionName(), user.Id);
然后在每个需要认证的页面的Page_Load()中加入了如下代码:
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
Mitumori.Authentication.UserAuthenticate(Context);
...
}
----------
Config.cs是这样写的:
public static string GetConnectionString()
{
//http://www.connectionstrings.com/
//return "Provider=sqloledb;Data Source=WebServer;Initial Catalog=Mitumori;User Id=sa;Password=;";//SQLServer
return "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\\MITUMORI\\source\\Mitumori\\bin\\data\\MITUMORI.mdb;User Id=admin;Password=;";
}
public static string GetUserSessionName()
{
return "myusersession";
}
----------
Authentication.s是这样写的:
public static void UserAuthenticate(System.Web.HttpContext Context)
{
if(Context.Session[Config.GetUserSessionName()] == null)
{
Context.Response.Redirect(Context.Request.ApplicationPath + "/user/login.aspx?ReturnUrl=" + Context.Request.CurrentExecutionFilePath, true);
}
}
当我仅仅更改了上面Config.cs中的获取连接字符串的那段从SQLServer更改到Access的后,连接数据库当然没有问题,而且我跟踪了一下一切都是照常登录的,但是在UserAuthenticate()中的时候那个if语句竟然变成了true。
我的web.config是这样设置的(我把没用的都注释掉了,特别是那个sessionState节,我更是把它注释和未注释两种状态都尝试过了):
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.web>
<!-- 动态调试编译
设置 compilation debug="true" 以启用 ASPX 调试。否则,将此值设置为
false 将提高此应用程序的运行时性能。
设置 compilation debug="true" 以将调试符号(.pdb 信息)
插入到编译页中。因为这将创建执行起来
较慢的大文件,所以应该只在调试时将此值设置为 true,而在所有其他时候都设置为
false。有关更多信息,请参考有关
调试 ASP.NET 文件的文档。
-->
<compilation
defaultLanguage="c#"
debug="true"
/>
<!-- 自定义错误信息
设置 customErrors mode="On" 或 "RemoteOnly" 以启用自定义错误信息,或设置为 "Off" 以禁用自定义错误信息。
为每个要处理的错误添加 <error> 标记。
"On" 始终显示自定义(友好的)信息。
"Off" 始终显示详细的 ASP.NET 错误信息。
"RemoteOnly" 只对不在本地 Web 服务器上运行的
用户显示自定义(友好的)信息。出于安全目的,建议使用此设置,以便
不向远程客户端显示应用程序的详细信息。
-->
<customErrors
mode="RemoteOnly"
/>
<!-- 身份验证
此节设置应用程序的身份验证策略。可能的模式是 "Windows"、
"Forms"、 "Passport" 和 "None"
"None" 不执行身份验证。
"Windows" IIS 根据应用程序的设置执行身份验证
(基本、简要或集成 Windows)。在 IIS 中必须禁用匿名访问。
"Forms" 您为用户提供一个输入凭据的自定义窗体(Web 页),然后
在您的应用程序中验证他们的身份。用户凭据标记存储在 Cookie 中。
"Passport" 身份验证是通过 Microsoft 的集中身份验证服务执行的,
它为成员站点提供单独登录和核心配置文件服务。
-->
<!--
<authentication mode="Forms">
<forms name=".ASPXCOOKIEDEMO" loginUrl="sys_login.aspx" protection="All" timeout="30" path="/">
</forms>
</authentication>
<authorization>
<deny users="?" />
</authorization>
-->
<!-- 应用程序级别跟踪记录
应用程序级别跟踪为应用程序中的每一页启用跟踪日志输出。
设置 trace enabled="true" 可以启用应用程序跟踪记录。如果 pageOutput="true",则
在每一页的底部显示跟踪信息。否则,可以通过浏览 Web 应用程序
根目录中的 "trace.axd" 页来查看
应用程序跟踪日志。
-->
<!--
<trace
enabled="false"
requestLimit="10"
pageOutput="false"
traceMode="SortByTime"
localOnly="true"
/>-->
<!-- 会话状态设置
默认情况下,ASP.NET 使用 Cookie 来标识哪些请求属于特定的会话。
如果 Cookie 不可用,则可以通过将会话标识符添加到 URL 来跟踪会话。
若要禁用 Cookie,请设置 sessionState cookieless="true"。
-->
<!--
<sessionState
mode="InProc"
stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"
cookieless="false"
timeout="20"
/>-->
<!-- 全球化
此节设置应用程序的全球化设置。
-->
<globalization
requestEncoding="utf-8"
responseEncoding="utf-8"
/>
</system.web>
</configuration>