session、cookie、viewstate cookie
session的用法
定义:保存在服务器内存的数据,sesson 只应该应用在需要跨页面且与每个访问用户相关的变量和对象存储上,session在默认情况下20分钟就过期,在页面之中最好不要过多使用,因为这会加重服务器的压力和带宽
增与修:
Session.Add("session名称", 变量名);
Session.Add("userId",userId);
Session.Add("test", DateTime.Now);
Session["test"] = DateTime.Now;
添加和修改Session的方法是一样的,当指定的Session标识不存在时,系统会添加。当存在时系统会更新。
在一般处理程序中需要加using
1、引入 命名空间:
using System.Web.SessionState;
public class AddUserInfo : IHttpHandler,IRequiresSessionState //就是这样显示的实现一下,不用实现什么方法
{
public void ProcessRequest(HttpContext context)
{
//...
//这样你就可以如下 操作了
if(context.Session["userAccount"] != null)
{
string account = context.Session["userAccount"].ToString();
}
//...继续下面的代码
}
}
删:
Session.Remove("test"); //删除指定的
不要使用Session["test"] = null; 这样只是将值设置为NULL!
移除所有Session项
Session.Clear(); 或 Session.RemoveAll();
终止当前会话状态
Session.Abandon();
当前Session项数量
Session.Count
当前SessionId
Session.SessionID
Session过期时间
在web.config中设置 <sessionState mode="InProc" timeout="20"></sessionState> 分钟值。(未填写时默认是20分钟过期)
如果需要防止过期那就把时间加长并且不允许缓冲
如何让网页不缓冲 Response.Expires = 0 Response.ExpiresAbsolute = Now() - 1 Response.Addheader “pragma”,”no-cache” Response.Addheader “cache-control”,”private” Response.CacheControl = “no-cache
定义: 保存在客户端中的数据,存储最大4kb的数据。cookie的名/值中的值不允许包含分号、逗号和空白符。认的有效期很短暂,它只能持续在Web浏览器的会话期间,一旦用户关闭了浏览器,cookie保存的数据就丢失了。如果想延长cookie的有效期,可以通过设置max-age属性.
语法:
HttpCookie(String) //创建并命名Cookie
HttpCookie(String,String) //创建命名Cookie并为其赋值
属性:
Domain //获取或设置Cookie的作用域 接受或返回一个String值
Expires //获取或设置Cookie的有效时间 接受或返回一个DateTime值
HasKeys //获取一个值,通过该值指示Cookie是否含有子键,返回一个bool值
HttpOnly //获取或设置一个值,该值指定Cookie是否可以通过客户端脚本访问,接受或返回一个bool值
Name //获取或设置Cookie的名称,该值接受或返回一个String值
Path //获取或设置该Cookie作用路径,接受或返回一个String值
Secure //获取或设置Cookie是否安全传输(即仅通过Https传送),接受或返回一个bool值
Value //获取或设置单个Cookie的值,接受或返回一个String
Values //获取单个Cookie所包含的键值对的集合,返回一个
C#写入一个Cookie,在前台通过jQuery读取。后端代码
增加 :
public ActionResult Index() { HttpCookie hc = new HttpCookie("userName","admin"); hc.Path = "/"; hc.Expires = DateTime.Now.AddDays(7); Response.SetCookie(hc); return View(); }
注意:有的情况下会出现乱码!
存cookie,进行编码:
cookie.Value = HttpUtility.UrlEncode("上海");
取cookie时候,进行解码:
cookieValue = HttpUtility.UrlDecode(cookie.Value);
添加cookies一般不会有人出错的。。。记得添加Expires就行
修改:
HttpCookie cookies = Request.Cookies["Porschev"]; cookies["name"] = "wilson Z"; //加上下面一句 Response.Cookies["Porschev"].Expires = DateTime.Now.AddMinutes(-1);
删除:
删除部分: HttpCookie cookies = new HttpCookie("Porschev"); cookies.Expires = DateTime.Now.AddDays(-1); Response.Cookies.Add(cookies); 删除全部: foreach (string cookiename in Request.Cookies.AllKeys) { HttpCookie cookies = Request.Cookies[cookiename]; if (cookies != null) { cookies.Expires = DateTime.Today.AddDays(-1); Response.Cookies.Add(cookies); Request.Cookies.Remove(cookiename); } } }
viewstate
在asp时代, 大家都知道一个html控件的值,比如input 控件值,当我们把表单提交到服务器后, 页面再刷新回来的时候, input里面的数据已经被清空. 这是因为web的无状态性导致的, 服务端每次把html输出到客户端后就不再于客户端有联系.
asp.net巧妙的改变了这一点. 当我们在写一个asp.net表单时, 一旦标明了 form runat=server ,那么,asp.net就会自动在输出时给页面添加一个隐藏域