日期:2014-05-17  浏览次数:20571 次

CS转BS难点,请高手指点
各位大神,小弟刚刚从CS开发转型BS开发,现在有以下几点疑问,请大神帮帮忙。
第一是URL的疑问:
例一:http://bbs.csdn.net/topics/new?forum_id=CSharp
例二:http://m0.mail.sina.com.cn/classic/index.php#title=%25E4%25BA%25BA%25E5%25A4%25A7%25E5%258E%259F%25E6%258B%259B%25E7%2594%259F%25E5%25A4%2584%25E9%2595%25BF%25E8%25A2%25AB%25E8%25B0%2583%25E6%259F%25A5+%25E6%258F%25AD%25E9%25AB%2598%25E6%25A0%25A1%25E8%2587%25AA%25E4%25B8%25BB%25E6%258B%259B%25E7%2594%259F%25E9%25BB%2591%25E5%25B9%2595&action=reader&is_search=false&fid=new&mid=02CCFF96296AD191457D88DBE3EED9025400000000000001&pageno=1&flag&order=htime&sorttype=desc&pos=0
这两个URL的彩色部分到底是什么意思,怎么理解,紫色的部分有人告诉我是中文的转义,这个基本我懂了,但是类似forum_id=CSharp、fid=new、is_search=false这些应该都是参数,这些应该怎么用?干什么用?
第二是Session的疑问:
Session就是一个会话,我把Session理解成为一个Client应该也可以,在CS中控制Client可以使用Login Form控制MenuItem的Enabled属性,而在Web中我如果把Login.aspx作为首页,但是我可以直接通过URL跳过首页啊,这个我不明白
第三还是URL问题:
如果我设计一个站点,所有的代码均在服务器端处理,或者说我所有的业务逻辑都要靠ClickButton来产生回调,那我的URL里面就不需要参数了啊,就不会出现这些文号、井号、百分号的东西了啊,既然我可以不用,那么人家也可以不用,那为什么人家这些站点都必须得用呢?肯定还是有用处的。大神们能给我讲讲用处吗?
第四是Cookie的问题:
Cookie是啥东西,有什么用,参考什么资料学。

希望各位大神能帮帮我

------解决方案--------------------
这些最基本的问题在任何一本web程序开发的书上都有。

很难和你说清楚,因为你的基本认识都是错的。比如说会话是客户端,这是哪对哪。

要说最基本的,那就是,一个web系统,分为客户端(浏览器)和服务器端,客户端提交访问请求,服务器端处理,并且返回数据。请注意这个过程和桌面程序的本质不同。一个是,服务器不能主动和客户端通讯,一个是,服务器只是通过http协议和浏览器通讯,它不能获知浏览器的状态,每次请求和响应都是独立的。

如果你能理解这些最基本的概念,那么很容易解释如下问题。

为什么我们需要用querystring和postdata提交数据,因为http协议下,这是基本且唯一的客户端提交数据的方式。而所谓的控件、回发不过是asp.net基于如上的一种模拟。

querystring是最基本的,面向浏览器和搜索引擎的方式。很显然,如果全部使用postdata,那么这样的网页是无法被浏览器收录的,也不能直接通过url请求到。

为什么我们需要cookie,因为我们需要跟踪客户端的会话状态。即让服务器将同一个客户端连续发来的多次请求视作一个整体。会话就是这个意思。
------解决方案--------------------
1、forum_id=CSharp是页面传参,用Request["forum_id"]可以得到CSharp,可以理解为当前页面的全局变量,只是这里的定义和附值都由用户设定也可以是aa=CSharp,相于的,Request["aa"]=CSharp


2、用的浏览器是不兼容中文url的,所以这里需要将中文字符或特殊符号转义字符,但中用Request["xxx"]就可以了,默认将字符转义回来

3、多个参数间用&分划
aspx?aa=123&bb=456&cc=567(注:url不是无限长的,好像http地址的最大长度为255个字符)

4、Session只是一个全局的变量,可以用作登陆凭证
登陆成功时保存凭证Session["userid"]="admin"

管理后台的每个页面都要先验证凭证,通过就继续,不通过就返回登陆页,然后结束

if(Session["userid"]==null
------解决方案--------------------
Session["userid"]!="admin"){
   throw (new Exception("用户没有登陆或登陆已超时!"));
}