新足迹

 找回密码
 注册

精华好帖回顾

· 赋予我另一种生活的六天——获得136签的感想,兼感谢信 (2007-1-13) purpleme · 参加活动 - 5年杂拍 (2013-1-3) zzoz
· 【分享】庆祝今天路考顺利+幸运过关 2005.4.4(有关路考经验+危险能力测试HPT) (2005-4-4) powermao · 南澳阿德,袋鼠岛,蓝湖9日游(完结) (2011-10-27) kate555
Advertisement
Advertisement
查看: 1743|回复: 19

ASP.NET 小白问题 #1: session object [复制链接]

头像被屏蔽

禁止发言

发表于 2010-11-6 15:18 |显示全部楼层
此文章由 iami 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 iami 所有!转贴必须注明作者、出处和本声明,并保持内容完整
众仙!

俺现在遇到一个ASP.NET下关于session 的问题。甚是苦恼。

结构如下
Page 1:
1/. textbox -> to accept a user input (a string, say)
2/. botton -> code behind, to save the user input into the session object
3/. label -> code behind, to retrieve the session["key"], and assign the value to lable.text(dispay)

Page 2:
1/. label -> to do the same job as the label on Page1 (to display the value of the seesion["key"]).

我遇到的问题是这样

问题一:
在第一页上,传textbox.text到session["key"],
然后把值拿出来,赋给label.text,需要cast到String。
但是我发现 (string)或者(String)都能cast.S的大小写都没有关系。
这怎么回事啊,java里没遇到过这种现象。心里很不安,求解

    protected void Button2_Click(object sender, EventArgs e)
    {
        Session["SessionSetting"] = TextBox1.Text;
        Label4.Text = (String)Session["SessionSetting"];
    }

问题二:
原来的session在第一页上没有问题,到第二页上我一定要加上它的namespace Page.Session[]才能工作。
为什么第一页不用加呢?

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            if (Page.Session["SessionSetting"] != null)
            {
                Label4.Text = (string)Page.Session["SessionSetting"];
            }
        }
    }

谢众仙解惑!
签名被屏蔽
Advertisement
Advertisement
头像被屏蔽

禁止发言

发表于 2010-11-6 17:23 |显示全部楼层

第一个问题,我以前问过。

此文章由 澳贼 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 澳贼 所有!转贴必须注明作者、出处和本声明,并保持内容完整
大仙的答案是。 in c#, String == string

发表于 2010-11-6 18:04 |显示全部楼层
此文章由 fly050505 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 fly050505 所有!转贴必须注明作者、出处和本声明,并保持内容完整
简单抛个砖:
String是.NET type.
string是C#中的string.
String是C#, VB或者其他可以用.net的字符串的爹,哈哈。有本啥书,专讲.net 语法的,你可以查一下。

发表于 2010-11-6 18:06 |显示全部楼层
此文章由 fly050505 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 fly050505 所有!转贴必须注明作者、出处和本声明,并保持内容完整
有点奇怪,兄弟。
session是和Page相关的,
不同的page是调用的不同session.
(Page.Session["SessionSetting"]
你这是调了啥?
你可以换成this.Session?

2007 年度奖章获得者

发表于 2010-11-6 18:19 |显示全部楼层
此文章由 coolioo 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 coolioo 所有!转贴必须注明作者、出处和本声明,并保持内容完整
问题二:
Page不是namespace,是property

按道理直接用Session["key"]就可以

2007 年度奖章获得者

发表于 2010-11-6 18:29 |显示全部楼层
此文章由 coolioo 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 coolioo 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 fly050505 于 2010-11-6 19:06 发表
有点奇怪,兄弟。
session是和Page相关的,
不同的page是调用的不同session.
(Page.Session["SessionSetting"]
你这是调了啥?
你可以换成this.Session?


,概念严重错误 ,面试要这么说,直接fail...
C.B
Advertisement
Advertisement

发表于 2010-11-6 18:42 |显示全部楼层
此文章由 kawara 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 kawara 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 coolioo 于 2010-11-6 19:29 发表


,概念严重错误 ,面试要这么说,直接fail...

总算来了个明白点的net程序员

发表于 2010-11-6 18:54 |显示全部楼层
此文章由 fly050505 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 fly050505 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 coolioo 于 2010-11-6 19:29 发表


,概念严重错误 ,面试要这么说,直接fail...


呵呵,多谢纠正。
应该是,session 和 browser相关的。关掉browser的page,session就消失了。

发表于 2010-11-6 19:35 |显示全部楼层
此文章由 gooderic1977 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 gooderic1977 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 fly050505 于 2010-11-6 19:54 发表


呵呵,多谢纠正。
应该是,session 和 browser相关的。关掉browser的page,session就消失了。



又错!Session var是Server端的存储,浏览器关闭,Server端怎么会知道? Session有时限,所以timeout了就从内存中被移出了。

还有一种机制,如果是数据库存储的session,可以通过读取浏览器cookie重新获得。

评分

参与人数 2积分 +5 收起 理由
iami + 3 分不够了,担待啊
coolioo + 2 precisely

查看全部评分

发表于 2010-11-6 21:29 |显示全部楼层
此文章由 乱码 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 乱码 所有!转贴必须注明作者、出处和本声明,并保持内容完整
答案大家都给出了.

补充一点:纠正别人错误的时候,态度要和蔼,口气要缓和,大家谁不是从junior成长起来的?
     
认知有先后,仅此而已。

评分

参与人数 3积分 +10 收起 理由
windix + 3 我很赞同
iami + 3 论坛需要你这样的态度,谢谢
澳贼 + 4 好人啊

查看全部评分

2010年度奖章获得者

发表于 2010-11-6 23:03 |显示全部楼层
此文章由 dalaohu 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 dalaohu 所有!转贴必须注明作者、出处和本声明,并保持内容完整
iami 的第二个问题,没有被回答啊。

session 的中宗是在 HttpContext.Current.Session 里。
Page, UserControl 都有 "Session" 这个Property. 他们也都是到 HttpContext.Current.Session 里来读取的。
所以你用session是直接就跟HttpContext.Current.Session打交道好了, 不要理会Page, UserControl 之类。 Session 本来就跟Page他们没有关系。

你说在第二页, 你一定要加 Page.Session 才行, 那可能是因为那页你么有 using System.Web.UI
Page 是在 System.Web.UI namespace 之下的。

第一个问题, Stirng 是正宗, string 是alias, 两者在c#里通用的。

评分

参与人数 1积分 +3 收起 理由
iami + 3 多谢指点

查看全部评分

足迹 Reader is phenomenal. If you never used, you never lived 火速下载
Advertisement
Advertisement
头像被屏蔽

禁止发言

发表于 2010-11-7 11:46 |显示全部楼层
此文章由 iami 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 iami 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 dalaohu 于 2010-11-7 12:03 AM 发表
iami 的第二个问题,没有被回答啊。

session 的中宗是在 HttpContext.Current.Session 里。
Page, UserControl 都有 "Session" 这个Property. 他们也都是到 HttpContext.Current.Session 里来读取的。
所以你用sessio ...


大哥请看下面我贴的page2的code;
在第8,9两行,我加了using众仙提到的namespace,
22行,lable4,去掉Page.后还是过不去。(红色箭头处)




第一页的code也贴出来


[ 本帖最后由 iami 于 2010-11-7 13:05 编辑 ]
签名被屏蔽
头像被屏蔽

禁止发言

发表于 2010-11-7 11:53 |显示全部楼层
此文章由 iami 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 iami 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 gooderic1977 于 2010-11-6 08:35 PM 发表



又错!Session var是Server端的存储,浏览器关闭,Server端怎么会知道? Session有时限,所以timeout了就从内存中被移出了。

还有一种机制,如果是数据库存储的session,可以通过读取浏览器cookie重新获得。 ...


多谢, 数据库的存储的session的概念
签名被屏蔽
头像被屏蔽

禁止发言

发表于 2010-11-7 12:00 |显示全部楼层
此文章由 iami 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 iami 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 fly050505 于 2010-11-6 07:06 PM 发表
有点奇怪,兄弟。
session是和Page相关的,
不同的page是调用的不同session.
(Page.Session["SessionSetting"]
你这是调了啥?
你可以换成this.Session?


兄弟请看我在12楼贴的图片,上面有我using的namespaces,试过this.session也不工作。
只有page.session才行
签名被屏蔽

2010年度奖章获得者

发表于 2010-11-7 12:01 |显示全部楼层
此文章由 dalaohu 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 dalaohu 所有!转贴必须注明作者、出处和本声明,并保持内容完整
吧你的 using 全部delete
只要两个

using System;
using System.Web;

然后。

Label4.Text = HttpContext.Current.Session["SessionSetting"].ToString();
头像被屏蔽

禁止发言

发表于 2010-11-7 12:16 |显示全部楼层

回复 15# 的帖子

此文章由 iami 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 iami 所有!转贴必须注明作者、出处和本声明,并保持内容完整
神奇恐怖~!果然过去了。

if (Page.Session["SessionSetting"] != null)
{
      Label4.Text = (string)HttpContext.Current.Session["SessionSetting"];//.ToString();
      Label4.Text = (string)Page.Session["SessionSetting"];
}

现在第二页上,labe4的session用你说的httpContext.current,和page.session都可以。
我估计session是和第一页联系起来的,并且是有access的限制的。
在第二页一要去access的时候,一定要explicitly指定是Page下的session
签名被屏蔽
Advertisement
Advertisement

2010年度奖章获得者

发表于 2010-11-7 12:39 |显示全部楼层

回复 16# 的帖子

此文章由 dalaohu 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 dalaohu 所有!转贴必须注明作者、出处和本声明,并保持内容完整
session 是global 的, 跟page没关系。

你用Page.Session 的话, 不好, 因为他还是要call HttpContext来读取。
你直接用HttpContext 最快。而且能用在class library里, Page就不行了。
足迹 Reader is phenomenal. If you never used, you never lived 火速下载
头像被屏蔽

禁止发言

发表于 2010-11-7 12:53 |显示全部楼层

回复 17# 的帖子

此文章由 iami 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 iami 所有!转贴必须注明作者、出处和本声明,并保持内容完整
great!!
听你的没错

发表于 2010-11-7 12:54 |显示全部楼层
此文章由 乱码 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 乱码 所有!转贴必须注明作者、出处和本声明,并保持内容完整
只要用到using system.web这个namespace,直接用Session就好.

在httpmodules里面,有System.Web.SessionState.SessionStateModule,专门负责根据你的cookie来从Sessionstore来取Session varialbies.

Session store又是一个大话题,可以伸展到加密/解密,solution scalibility,load balancer这些algorithm/framework/performance tunning这类的东西,你这个阶段先别关心,免得confuse yourself.
头像被屏蔽

禁止发言

发表于 2010-11-7 15:43 |显示全部楼层
此文章由 iami 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 iami 所有!转贴必须注明作者、出处和本声明,并保持内容完整
原帖由 乱码 于 2010-11-7 01:54 PM 发表
只要用到using system.web这个namespace,直接用Session就好.

在httpmodules里面,有System.Web.SessionState.SessionStateModule,专门负责根据你的cookie来从Sessionstore来取Session varialbies.

Session store又是 ...


谢谢建议。一口吃不成胖子。我先记下来,等到认识深入了在继续提高。:)
签名被屏蔽

发表回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Advertisement
Advertisement
返回顶部