读书人

asp.net。初学编程。求怎么ashx获取Se

发布时间: 2013-07-16 22:38:05 作者: rapoo

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"];

[解决办法]
引用:
首先的ashx中的类要继承 IReadOnlySessionState 接口。

然后在 ProcessRequest 事件中这样获取Cookie和Session


context.Request.Cookies["id"];
context.Session["id"];


应该继承 IRequiresSessionState 接口。


[解决办法]
ashx文件也是一样,只不过cookie是从context.Request.Cookies里获取
[解决办法]

这个Cookie和

Session不是一直都在的嘛?如果像aspx,就是随时可以读取的吧(但愿我没有弄错)ashx执行到这里,不就是去读取Cookie和Session么,这个Cookie和Session不是还在的嘛,怎么会读不到了?
新人思维,求解。。不胜感激涕零asp.net。初学编程。求怎么ashx获取Session或者Cookies中的用户名

想了想觉得意思是:客户端提交到这个页面,但是提交中没有带Cookie和Session的参数。这样他可以获取到客户端已存在的Cookie和Session吗?


你对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和Session已经被带来了,只要在这个页面按格式编写代码就可以取到值了嘛?


是的,你可以通过一些工具查看,每次你打开一个页面时,会附加Cookie的值,这个值对用户是透明的,它是自动提交给服务器的,服务器通过Cookie的值进行Cookie获取或者是Session的获取。

注意,Cookie是写在客户端的,Session是写在服务器端的。只不过是Session需要依赖Cookie的某些值才能区分用户。

在asp.net中,Session可以设置为不依赖于Cookie,其中实现的原理没研究过。


[解决办法]
不客气,这是一个互相提高的过程
[解决办法]
imageUp:IHttpHandler:IRequiresSessionState
[解决办法]
这个应该简单,呵呵。。。

读书人网 >asp.net

热点推荐