我现在的一个解决方案,有4个Web应用,我想在4个应用中实现单点登录,也就是Single Sign On。
1、执行了installsqlstate.sql,修改了Web.Config,但每次重新开机,都提示如下:
“拒绝了对对象 'ASPStateTempApplications'(数据库 'tempdb',所有者 'dbo')的 SELECT 权限。拒绝了对对象 'ASPStateTempApplications'(数据库 'tempdb',所有者 'dbo')的 SELECT 权限。拒绝了对对象 'ASPStateTempApplications'(数据库 'tempdb',所有者 'dbo')的 INSERT 权限。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 ”
于是每次都得给ASPStateTempApplications这个数据库加上IIS_WPG这个用户。
Web.Config的内容如下:
<sessionState
mode="SQLServer"
sqlConnectionString="data source=127.0.0.1;Integrated Security=SSPI;"
cookieless="false"
timeout="20"
/>2、加好权限后,我以为各个Web应用即可共享Session,在Web应用1中有如下代码:
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
Session["User"]="ABC";
}
一个按钮,点击后进入Web应用2。
private void Button2_Click(object sender, System.EventArgs e)
{
Response.Redirect("/webapplication2/default.aspx");
}
在Web应用2中,想读取Web1里的Session数据,代码如下:
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
Response.Write(Session["User"].ToString());
}
可是会出现以下错误:
未将对象引用设置到对象的实例。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。源错误:
行 20: {
行 21: // 在此处放置用户代码以初始化页面
行 22: Response.Write(Session["User"].ToString());把行22改成:Response.Write(Session.Count);执行正常,但显示0。也就是无法读取Web1里的Session。
1、执行了installsqlstate.sql,修改了Web.Config,但每次重新开机,都提示如下:
“拒绝了对对象 'ASPStateTempApplications'(数据库 'tempdb',所有者 'dbo')的 SELECT 权限。拒绝了对对象 'ASPStateTempApplications'(数据库 'tempdb',所有者 'dbo')的 SELECT 权限。拒绝了对对象 'ASPStateTempApplications'(数据库 'tempdb',所有者 'dbo')的 INSERT 权限。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 ”
于是每次都得给ASPStateTempApplications这个数据库加上IIS_WPG这个用户。
Web.Config的内容如下:
<sessionState
mode="SQLServer"
sqlConnectionString="data source=127.0.0.1;Integrated Security=SSPI;"
cookieless="false"
timeout="20"
/>2、加好权限后,我以为各个Web应用即可共享Session,在Web应用1中有如下代码:
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
Session["User"]="ABC";
}
一个按钮,点击后进入Web应用2。
private void Button2_Click(object sender, System.EventArgs e)
{
Response.Redirect("/webapplication2/default.aspx");
}
在Web应用2中,想读取Web1里的Session数据,代码如下:
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
Response.Write(Session["User"].ToString());
}
可是会出现以下错误:
未将对象引用设置到对象的实例。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。源错误:
行 20: {
行 21: // 在此处放置用户代码以初始化页面
行 22: Response.Write(Session["User"].ToString());把行22改成:Response.Write(Session.Count);执行正常,但显示0。也就是无法读取Web1里的Session。
应该先判断一下Session["User"]是否为空。
2.用Session,用户之间不会知道其Identify(用户唯一标志),Cache是共享的,
只要知道另一个用户Identify,就可以读取数据
3.实现不同用户之间的存储信息,用Session,直接设个常量存取就可以啦,
比如: Session["UserID"]=xxxx;
但是用Cache,必须得为每个用户生成一个Identify,是这样存储的
Cache[Identify] = xxx; //因为Cache是所有用户共享变量,所以得区分开各个用户4.Session在应用程序之间很难实现共享,Cache可以容易实现共享
我每次都添加IIS_WPG用户,可关机后又消失了。是不是tempdb不能保存用户的修改啊?
我是单服务器,所有的应用、数据库等都在一个机器上,也不行吗?