asp.net。初学编程。求如何ashx获取Session或者Cookies中的用户名
asp.net。初学编程 ,求如何通过读取Session或者Cookies中的用户名
然后下面这个imageUp.ashx接收
主要是imageUp.ashx如何获得Cookies的用户名?然后pathbase = 用户名+"/" ;
<%@ WebHandler Language="C#" Class="imageUp" %>
<%@ Assembly Src="Uploader.cs" %>
using System;
using System.Web;
using System.IO;
using System.Collections;
public class imageUp : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
//上传配置
int size = 2; //文件大小限制,单位MB //文件大小限制,单位MB
string[] filetype = { ".gif", ".png", ".jpg", ".jpeg", ".bmp" }; //文件允许格式
//上传图片
Hashtable info = new Hashtable();
Uploader up = new Uploader();
string pathbase = null;
int path=Convert.ToInt32( up.getOtherInfo(context, "dir"));
if (path == 1)
{
pathbase = "upload/" ;
}else{
pathbase = "upload1/";
}
info = up.upFile(context, pathbase, filetype, size); //获取上传状态
string title = up.getOtherInfo(context, "pictitle"); //获取图片描述
string oriName = up.getOtherInfo(context, "fileName"); //获取原始文件名
HttpContext.Current.Response.Write("{'url':'" + info["url"] + "','title':'" + title + "','original':'" + oriName + "','state':'" + info["state"] + "'}"); //向浏览器返回数据json数据
}
public bool IsReusable
{
get
{
return false;
}
}
}
为“登录”按钮Click事件函数添加代码
protected void Button1_Click(object sender, EventArgs e)
{
HttpCookie cookie = Request.Cookies["chp6"];
string sid;
if (cookie != null)
{
sid = cookie["sid"];
}
else
{
cookie = new HttpCookie("chp6");
Guid gid = new Guid();
sid = gid.ToString();
cookie["sid"] = sid;
}
Session[sid] = tbUserName.Text;
cookie.Expires = DateTime.Now.AddMinutes(30);
Response.Cookies.Add(cookie);
Response.Redirect("~/Cookie2.aspx");
}
为了简便,Cookie2页面只有一个Label控件,起名为lbUserName,再为Cookie2页面的Page_Load事件添加如下代码
protected void Page_Load(object sender, EventArgs e)
{
HttpCookie cookie = Request.Cookies["chp6"];
if (cookie != null)
{
string sid = cookie["sid"];
string uname = Session[sid] as string;
lbUserName.Text = uname == null ? "未登录" : uname;
}
else
lbUserName.Text = "未登录";
}
在Cookie2页面中就能看到在Cookie1里输入的用户名了,我这里为了省事直接将string对象存入Session,实际工作中最好是存储一个Dictionary对象,这样就能存储更多的信息了
[解决办法]
首先的ashx中的类要继承 IReadOnlySessionState 接口。
然后在 ProcessRequest 事件中这样获取Cookie和Session
context.Request.Cookies["id"];
context.Session["id"];
[解决办法]
应该继承 IRequiresSessionState 接口。
[解决办法]
ashx文件也是一样,只不过cookie是从context.Request.Cookies里获取
[解决办法]
你对ASP.NET的构成和页面的生命周期这些知识严重缺乏。
ashx和asp.net其实很像,无非是aspx页面绑定在page类中,并且有一个html页面供他解析。
而ashx页面没有Page类,但是解析过程和执行过程和aspx页面没有区别。
还有Cookie和Session的使用方法您估计也没弄清楚。
Cookie是依赖于客户端的,每次提交访问页面都会把Cookie发送给服务器端,这样服务器端才能读取到,而且必须是所请求的页面才能读取(Http协议是无状态协议),Session是依赖于Cookie的,在Cookie中储存Session的ID,每次请求页面,同样将Session的ID提交给服务器,这样服务器才能通过Session的ID获取Session值。
所以,你所谓的客户端不提交Cookie和Session的参数,服务器端当然无法获取了。
[解决办法]
是的,你可以通过一些工具查看,每次你打开一个页面时,会附加Cookie的值,这个值对用户是透明的,它是自动提交给服务器的,服务器通过Cookie的值进行Cookie获取或者是Session的获取。
注意,Cookie是写在客户端的,Session是写在服务器端的。只不过是Session需要依赖Cookie的某些值才能区分用户。
在asp.net中,Session可以设置为不依赖于Cookie,其中实现的原理没研究过。
[解决办法]
不客气,这是一个互相提高的过程
[解决办法]
imageUp:IHttpHandler:IRequiresSessionState
[解决办法]
这个应该简单,呵呵。。。