在cookie中通常会保存有登录会话的ID。例如在登录时,你可以在ashx中将用户的登录名、登录时间、主要授权权限、甚至购物车、优惠等等,凡是跟用户直接有关的信息,都写到一个对象中(或者说是一个叫做Passport的数据库表的记录中),然后将这个对象的ID做为ashx的返回值。而javascript程序将返回值写到cookie中。只需要保存一个ID号,而不需要保存过多的信息到客户端。在其它ashx中,可以通过Reqeust读取cookie找到这个ID,通过这个编号就可判断用户的各种身份信息、权限信息等等。
解决方案 »
- 如何实现js获取WebDataGrid当前行!(在线等候)
- MongoDB,创建连接池时MongoServerSettings的主要属性
- asp.net使用urlRewriter在本地服务器上正常,但在虚拟主机里却无法访问
- 这个问题怎么解决啊!!求求帮个忙
- 请求帮忙~~在ASPX与ASP页面之间传值的问题~~
- 谁能给个在线视频的例子?
- 再拿出100分,再帮小弟看看呢,还是没有用呢.
- 这个水晶报表公式怎么写(叛断是否为0 为0 则给 空值?)vb asp.net 空用 nothing 水晶报表里空是用什么表达 ??? 在线等,马上结
- 怎样在代码后置文件中实现如下所述的问题:
- 当project从一台机器拷贝到另一台时,debug就不行了???
- VS2013的css编辑其中的属性上哪去了?
- iis 6.0加载rewrite失败,如何解决?
using System;
using System.Web;
using System.Web.SessionState;
using CEMS.BLL;namespace CEMS.Web.Handles
{
public class HandleBase : IHttpHandler, IRequiresSessionState
{
#region 属性定义 private bool _PageRead = true;
private bool _PageAdd = true;
private bool _PageUpdate = true;
private bool _PageDel = true;
private string _UserID = LoginCls.GetUserID();
private string _UserName = LoginCls.GetUserName();
private string _virDir = ""; //网站虚拟目录
private HttpContext _PageContext; /// <summary>
/// 当前登录的用户ID
/// </summary>
public string UserID
{
get { return _UserID; }
}
/// <summary>
/// 当前登录的用户姓名
/// </summary>
public string UserName
{
get { return _UserName; }
}
/// <summary>
/// 是否具有读取权限
/// </summary>
public bool PageRead
{
get { return _PageRead; }
set { _PageRead = value; }
}
/// <summary>
/// 是否具有新增权限
/// </summary>
public bool PageAdd
{
get { return _PageAdd; }
set { _PageAdd = value; }
}
/// <summary>
/// 是否具有修改权限
/// </summary>
public bool PageUpdate
{
get { return _PageUpdate; }
set { _PageUpdate = value; }
} /// <summary>
/// 是否具有删除权限
/// </summary>
public bool PageDel
{
get { return _PageDel; }
set { _PageDel = value; }
} public string VirtualDirectory
{
get { return _virDir; }
set { _virDir = value; }
} public HttpContext PageContext
{
get { return _PageContext; }
set { _PageContext = value; }
} public bool IsReusable
{
get
{
return false;
}
} #endregion public void ProcessRequest(HttpContext context)
{
context.Response.ExpiresAbsolute = DateTime.Now.AddDays(-1);
context.Response.Expires = 0;
context.Response.CacheControl = "no-cache"; _PageContext = context;
_virDir = context.Application["VirtualDirectory"].ToString(); int v = LoginCls.IsLogin();
if (v != 430 && v != 433)
{
context.Response.Redirect(_virDir + "/Error.aspx?ErrCode=" + v.ToString());
context.Response.End();
}
GetThisLimit();
UpdateValid();
AddValid();
DeleteValid();
AjaxProcess(context);
} /// <summary>
/// 用这个替代ProcessRequest,在ashx中使用override重写
/// </summary>
public virtual void AjaxProcess(HttpContext context) { } /// <summary>
/// 验证是否有修改权限
/// </summary>
public virtual void UpdateValid() { } /// <summary>
/// 验证是否有添加权限
/// </summary>
public virtual void AddValid() { } /// <summary>
/// 验证是否有删除权限
/// </summary>
public virtual void DeleteValid() { } public static void outText(string txt)
{
HttpContext.Current.Response.ContentType = "text/plain";
HttpContext.Current.Response.StatusCode = 200;
HttpContext.Current.Response.Write(txt);
} private void GetThisLimit()
{
string filepath = GetFilePath();
if (filepath == "/main.aspx") //main.aspx文件
return; Employee_LoginLimit bll = new Employee_LoginLimit(); //从数据库中读取用户对当前执行页面的权限
Employee_LoginLimit.FileLimit myLimit = bll.GetLimitByFile(UserID, filepath);
_PageRead = myLimit.read;
_PageAdd = myLimit.add;
_PageUpdate = myLimit.update;
_PageDel = myLimit.del;
} private string GetFilePath()
{
string f = _PageContext.Request.UrlReferrer.AbsolutePath.ToLower(); if (!string.IsNullOrWhiteSpace(_virDir))
f = f.Substring(_virDir.Length);
return f;
}
}
}// 新增权限基类,继续读取权限基类
using System.Web;namespace CEMS.Web.Handles
{
public class HandleBaseForAdd:HandleBase
{
public override void AddValid()
{
if (!PageAdd)
{
HttpContext context = PageContext;
context.Response.Redirect(VirtualDirectory + "/Error.aspx?ErrCode=405"); //没有权限,跳转到错误页面
context.Response.End();
}
}
}
}//修改权限基类
using System.Web;namespace CEMS.Web.Handles
{
public class HandleBaseForUpdate : HandleBase
{
public override void UpdateValid()
{
if (!PageUpdate)
{
HttpContext context = PageContext;
context.Response.Redirect(VirtualDirectory + "/Error.aspx?ErrCode=405"); //没有权限,跳转到错误页面
context.Response.End();
}
}
}
}//删除权限基类
using System.Web;namespace CEMS.Web.Handles
{
public class HandleBaseForDelete:HandleBase
{
public override void DeleteValid()
{
if (!PageDel)
{
HttpContext context = PageContext;
context.Response.Redirect(VirtualDirectory + "/Error.aspx?ErrCode=405"); //没有权限,跳转到错误页面
context.Response.End();
}
}
}
}//调用示例,以新增权限为例
using System.Web;
using CEMS.Helper;namespace CEMS.Web.Handles
{
/// <summary>
///
/// </summary>
public class Test : HandleBaseAdd
{
public override void AjaxProcess(HttpContext context)
{
context.Response.ContentType = "text/plain";
string mid = context.Request["id"];
outText("你有新增的权限");
}
}
}
/// <summary>
/// 所有的aspx.cs页面必须继承的基类,用于全局判断用户是否登陆.
/// </summary>
public class BasePage:Page
{
public BasePage()
{
}
protected override void OnInit(EventArgs e)
{
if (Session["user"]==null)
{
Response.Redirect("~/default.aspx");
}
base.OnInit(e);
}
}然后 所有的aspx都继承它
public partial class _Default :BasePage
就可以咯