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;
}
}}ASP.NETsessionCookieashx
然后下面这个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;
}
}}ASP.NETsessionCookieashx
{
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对象,这样就能存储更多的信息了
但由此也可以学一点别的,所以还是很感谢哈
ps:偶的问题是ashx文件怎么接收cookie或者Session的值,假定这个值在登录得时候生成了,ashx文件如何得到他?
context.Request.Cookies["id"];
context.Session["id"];
应该继承 IRequiresSessionState 接口。
【有空可否贴更多的代码,我想看看是不是我在别的地方弄错了】
另外ashx文件除了通过ajax等提交外,可否像aspx一样取到值【即核心问题是:ashx是否只能透过提交给他的操作来获取获取Cookie和Session?】
这个是肯定的,如果你的提交页面不是它,它肯定无法处理。
还有,在ashx页面里面,因为没有Page类,所以获取Request和Response对象需要通过HttpContext来获取。using System;
using System.Collections.Generic;
namespace Netstars
{
/// <summary>
/// AjaxForm 的摘要说明
/// </summary>
public class AjaxForm : IHttpHandler,IRequiresSessionState
{
public void ProcessRequest(HttpContext context)
{
//在这里面写处理方法
}
}
}
这个是肯定的,如果你的提交页面不是它,它肯定无法处理。
还有,在ashx页面里面,因为没有Page类,所以获取Request和Response对象需要通过HttpContext来获取。using System;
using System.Collections.Generic;
namespace Netstars
{
/// <summary>
/// AjaxForm 的摘要说明
/// </summary>
public class AjaxForm : IHttpHandler,IRequiresSessionState
{
public void ProcessRequest(HttpContext context)
{
//在这里面写处理方法
}
}
}
哦,也就是说只在提交的瞬间能读取到,过后即使Cookie和Session还在他也读取不了(最重要的疑问。。)?
下次提交中还要带着Cookie和Session提交过去,否则就获取不到是不是这个Cookie和Session不是一直都在的嘛?如果像aspx,就是随时可以读取的吧(但愿我没有弄错)ashx执行到这里,不就是去读取Cookie和Session么,这个Cookie和Session不是还在的嘛,怎么会读不到了?
新人思维,求解。。不胜感激涕零想了想觉得意思是:客户端提交到这个页面,但是提交中没有带Cookie和Session的参数。这样他可以获取到客户端已存在的Cookie和Session吗?
想了想觉得意思是:客户端提交到这个页面,但是提交中没有带客户端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的参数,服务器端当然无法获取了。
你对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,其中实现的原理没研究过。
是的,你可以通过一些工具查看,每次你打开一个页面时,会附加Cookie的值,这个值对用户是透明的,它是自动提交给服务器的,服务器通过Cookie的值进行Cookie获取或者是Session的获取。注意,Cookie是写在客户端的,Session是写在服务器端的。只不过是Session需要依赖Cookie的某些值才能区分用户。在asp.net中,Session可以设置为不依赖于Cookie,其中实现的原理没研究过。
谢谢兄弟,你的耐心解答,尤其是最近这两次,特别提的是倒数第二次,给我的启发,然后验证成功了并顺利把问题解决了。
偶是初学编程的水准,很多东西都不懂是真真正正的不懂
非常非常感谢(一个是耐心一个是详细一个是帮了我的大忙)。。