Asp与Asp.net共用cookie

还是那个ASP的网站,让添个小功能;OK,没问题,不过我肯定是用asp.net来写,绝不会去用asp来写的,虽然这两天,已经把asp搞得半懂不懂了;

功能很简单的,却碰到一个小问题,就是用户状态,哪个用户登录了,这个当然很容易,看它的登录页面的代码,是写的session,我用C#读这个session,读不到,去网上查了查,搜出来不少文章,却没有什么实质的说明,也有的人说,asp与asp.net不可能共用session,这也有道理,session是应用程序级的变量,在当前窗口能用,关了窗口就消失了(记得好像是,只要这个窗口开着,再打开一个窗口也可以访问这个session)。

不想去管这些了,毕竟用不了session还可以用cookie,cookie是客户端的东西,只要是一个域下面的,应该是都可以访问的;它原的asp页面没有写cookie,我给它写了一个,然后用C#来读,也是读不到;有些郁闷了;

又去网上查了一下,说是asp直接写的cookie,asp.net无法直接读到,要重写一下,ASP代码如下:

Response.Cookies("AdminName")=rs("username")

Response.Write Request.Cookies("AdminName")

第二行看起来有些多此一举,代码有些奇怪,不过这样写,asp.net的确可以正确读取到,asp.net中的代码如下:

AdminName = Request.Cookies["AdminName"].Value.ToString();

由于我传的值有可能是中文的,我试了一下中文,结果asp.net读取到是

%D5%FE%D6%CE%B4%A6

这也很简单啊,转一下就行了,结果用Server.UrlDecode转不过来,想起前一段写百度小偷程序时,一个代码转换方法;如下:

System.Web.HttpUtility.UrlDecode(AdminName, System.Text.Encoding.GetEncoding(936));

这样就可以获得正常的中文了;

我把上面的思路整理一下;

在ASP中写入cookie的方法是:

Response.Cookies("cookie名称")="cookie的值"

Response.Write Request.Cookies("cookie名称")

那么在asp.net中读取时,包括读出中文:

string cookie;

cookie= Request.Cookies["cookie名称"].Value.ToString();

cookie= System.Web.HttpUtility.UrlDecode(cookie, System.Text.Encoding.GetEncoding(936));

我这里只写了asp写入cookie,asp.net读取的方法,没有写asp.net写入cookie,用asp读取;有机会再研究吧

文章出自:http://hi.baidu.com/2hill/blog/item/3535ee12d44d2dccc3fd78bd.html