网易首页 > 网易号 > 正文 申请入驻

在Web Service中session和cookie用法

0
分享至

session和cookie是常用的会话技术,在网站开发中得到了广泛地运用。Web Service作为一款能够开发交互式应用的前端程序,也会用到session和cookie。本文我们一起来学习在Web Service中使用session和cookie用法。

一、要在webservice中使用session,需要以下几点要求:

1.在服务端的方法中加入[WebMethod(EnableSession=true)]修饰方法;

2.在客户端,要在实例化了webservice代理类之后,要为它的CookieContainer 实例化一个 new CookieContainer();

这样才能使用session存储状态。

3.另外在多个webservice代理中,只要含有相同的cookie,就能共用相同的session,其中的cookie通过代理类的CookieContainer.GetCookies(new Uri(s.Url))["ASP.NET_SessionId"]取得,如果其他的webserivce代理类需要用相同的session则可以用CookieContainer.Add方法,将取得的cookie加入即可。

二、如果只想使用cookie,则只需要在客户端做设置就可以,服务器端不需要像session一样加入属性修饰。

另外webmethod只用于public的成员方法,不用于static的,虽然不报错,但在客户端代理类中是找不到static方法的。

在使用asp.net编写webservice时,默认情况下是不支持session的,但我们可以把WebMethod的EnableSession选项设为true来显式的打开它,请看以下例子:

1 新建网站WebSite

2 新建web服务WebService.asmx,它具有以下两个方法:

[WebMethod(EnableSession = true)]

public string Login(string name)

Context.Session["name"] = name;

return name;

[WebMethod(EnableSession = true)]

public string GetName()

if (Context.Session["name"] != null)

return Context.Session["name"].ToString();

else

return "";

3 添加asp.net页面SessionInWebservice.aspx

Text="Login" OnClick="btnLogin_Click" />

Text="GetName" OnClick="btnGetName_Click" />

SessionInWebservice.aspx.cs

protected void btnLogin_Click(object sender, EventArgs e)

{

WebService ws = new WebService();

ws.Login(txtName.Text);

}

protected void btnGetName_Click(object sender, EventArgs e)

{

WebService ws = new WebService();

lblName.Text = ws.GetName();

}

问题似乎到此结束了,按Login按钮记录用户名以后,再按GetName就可以获取到刚才输入的名字。

但如果我们另外新建一个website,并添加web引用来调用刚才编写的Web Service,问题就出来了,GeName方法并没有获取到我们刚才登录的用户名(如果是在winform中调用该方法,也会出现同样的问题)。莫非这个方法行不通了?

其实不然,我们给该WebService的CookieContainer赋值就可以了,修改SessionInWebservice.aspx.cs 的代码:

private static System.Net.CookieContainer cookieContainer

= new System.Net.CookieContainer();

protected void btnLogin_Click(object sender, EventArgs e)

{

localhost.WebService ws = new localhost.WebService();

ws.CookieContainer = cookieContainer;

ws.Login(txtName.Text);

protected void btnGetName_Click(object sender, EventArgs e)

localhost.WebService ws = new localhost.WebService();

ws.CookieContainer = cookieContainer;

lblName.Text = ws.GetName();

请注意:Login方法和GetName方法必须指定同一个CookieContainer,因此在这里我们使用了静态变量。

但如果是在不同的页面中调用该Web Service,问题依旧存在,因此我们需要重新修改代码,通过编写新类继承上面的Web Service,并给CookieContainer赋值就可以解决该问题了:

public class WebService1:localhost.WebService

private static System.Net.CookieContainer cookieContainer;

static WebService1()

cookieContainer = new System.Net.CookieContainer();

public WebService1()

this.CookieContainer = cookieContainer;

调用的时候也不需要重新给CookieContainer赋值了:

protected void btnLogin_Click(object sender, EventArgs e)

WebService1 ws = new WebService1();

ws.Login(txtName.Text);

protected void btnGetName_Click(object sender, EventArgs e)

WebService1 ws = new WebService1();

lblName.Text = ws.GetName();

相必通过以上的介绍,你一定对Web Service中session和cookie用法有所掌握和了解,当然在实际使用时发现在如果调用Web Service的两个页面是在同一个网站里可以,如果分别是2个不同网站的页面就还是不能使用同一个session。想学习更多的前端页面知识,可以观看本站java教程,学习更多的优质内容。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
痛心!广西失联18岁女孩李思绮去世,月薪3000,晚上11点才下班

痛心!广西失联18岁女孩李思绮去世,月薪3000,晚上11点才下班

小鋭有话说
2026-06-03 11:19:08
黄仁勋:AI投资或带来“疯狂”回报,“疯子”才会质疑

黄仁勋:AI投资或带来“疯狂”回报,“疯子”才会质疑

IT之家
2026-06-03 19:18:06
纳达尔:打破我在法网的纪录,比打破德约的24冠更难

纳达尔:打破我在法网的纪录,比打破德约的24冠更难

懂球帝
2026-06-03 23:45:34
今早台州一辆问界M9底部起火!刚刚,问界回应:非车辆自身原因导致

今早台州一辆问界M9底部起火!刚刚,问界回应:非车辆自身原因导致

都市快报橙柿互动
2026-06-03 12:22:15
英超俱乐部身价榜:曼城13.2亿第1,利物浦跌8500万,热刺跌1.11亿

英超俱乐部身价榜:曼城13.2亿第1,利物浦跌8500万,热刺跌1.11亿

懂球帝
2026-06-03 19:39:16
筹备3年!周星驰电影《女足》携手两大顶流,压力给到贾玲了

筹备3年!周星驰电影《女足》携手两大顶流,压力给到贾玲了

悠悠说世界
2026-06-03 15:41:07
“这么小就一脸恶婆婆相”,家长晒两个女儿吃饭视频,很难不偏心

“这么小就一脸恶婆婆相”,家长晒两个女儿吃饭视频,很难不偏心

妍妍教育日记
2026-06-03 20:07:24
保罗:西部这些年竞争太惨烈,当年火箭22连胜只上升1-2位

保罗:西部这些年竞争太惨烈,当年火箭22连胜只上升1-2位

懂球帝
2026-06-04 02:05:16
NBA总决赛G1开战前,文班亚马为马刺队友赠送了一份独特的礼物

NBA总决赛G1开战前,文班亚马为马刺队友赠送了一份独特的礼物

夜白侃球
2026-06-03 10:57:38
甘肃最牛诈骗犯,刚出狱就冒充市委副书记,因政绩优秀而被抓

甘肃最牛诈骗犯,刚出狱就冒充市委副书记,因政绩优秀而被抓

神奇的锤子
2025-02-23 22:11:02
买房最后悔的两波人:一波是2019年高价接盘,一波是2026抄底被套

买房最后悔的两波人:一波是2019年高价接盘,一波是2026抄底被套

今朝牛马
2026-06-03 21:30:38
从北大才女到毒枭:3分钟问诊,让10万美国人沦为瘾君子,狂赚1亿

从北大才女到毒枭:3分钟问诊,让10万美国人沦为瘾君子,狂赚1亿

莫地方
2026-06-02 00:10:58
Lisa带球逼宫驴老三失败,独自“抓娃娃”!

Lisa带球逼宫驴老三失败,独自“抓娃娃”!

八卦疯叔
2026-06-03 11:17:00
卖掉开8年的燃油车,花35万买了一辆理想L8,开了6个月,终于明白

卖掉开8年的燃油车,花35万买了一辆理想L8,开了6个月,终于明白

沙雕小琳琳
2026-06-01 06:06:09
山东美女老板“大静静”去世,年仅42岁,日常开路虎,还有貂衣店

山东美女老板“大静静”去世,年仅42岁,日常开路虎,还有貂衣店

裕丰娱间说
2026-06-03 22:42:24
印军上将多年后透露:2020年加勒万那夜,士兵和将军想打,打不动

印军上将多年后透露:2020年加勒万那夜,士兵和将军想打,打不动

贱议你读史
2026-06-03 17:03:53
原来就是她骗了朱丹1600万,她让朱丹倾家荡产,朱丹让她全网社死

原来就是她骗了朱丹1600万,她让朱丹倾家荡产,朱丹让她全网社死

混沌录
2026-06-02 22:58:08
国际足联发言人证实,央视世界杯签约金额创新高,不是六千万美金

国际足联发言人证实,央视世界杯签约金额创新高,不是六千万美金

野渡舟山人
2026-06-03 14:35:47
伟大的2-0!郑钦文终结者大爆冷,掀翻22号种子平纪录首进法网4强

伟大的2-0!郑钦文终结者大爆冷,掀翻22号种子平纪录首进法网4强

大秦壁虎白话体育
2026-06-03 19:08:23
释永信老照片曝光!21岁的他推着师傅去医院看病,看起来老实本分

释永信老照片曝光!21岁的他推着师傅去医院看病,看起来老实本分

火山詩话
2026-06-02 06:21:21
2026-06-04 06:47:01
动力节点Java培训
动力节点Java培训
动力节点专注Java培训事业
1367文章数 36关注度
往期回顾 全部

科技要闻

传DeepSeek融资意向500亿:腾讯投100亿

头条要闻

男子不想上班辞职后上武当山当道士 8个月后选择下山

头条要闻

男子不想上班辞职后上武当山当道士 8个月后选择下山

体育要闻

选择中国品牌的库里,和他们的巨大野心

娱乐要闻

官方痛批乱象 刘涛郑恺等艺人遭点名

财经要闻

AI,开始偷懒了?

汽车要闻

专访蒋平:安全不做高低配 长安要让安全技术普惠

态度原创

数码
健康
亲子
本地
公开课

数码要闻

高通CEO安蒙:“2026年是智能体之年”,Token成AI新货币

违规干细胞抗衰美容,为何肆无忌惮

亲子要闻

9岁孩童竟患上冠心病!医生说明原因,父母后悔不已……

本地新闻

用杨柳青年画的方式,打开天津

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版