ASP下的Session应用

      ASP与ASP.NET 2004-12-25 10:51
Session是什么?书上说,Session对象是用来存储特定用户的信息的。SessionID属性返回用户的会话标识。在创建会话时,服务器将为每一个会话生成一个单独的标识。会话标识以长整形数据类型返回,在很多情况下,SessionID可以用于Web页面的泩册。Timeont属性以分钟为单位为该应用程序的Session对象指定超时时限。如果用户在该超时时限之内不刷新或请求网页,则该会话将会终止。
在看完上面这一段标准的教课书上的文字以后,除非是ASP高手,不然是绝不会明白它在说些什么的。想起一个笑话,说有一个飞行员在空中迷了路,便向一幢大厦发出了一个问题:“我在那里?”很快,那大厦的人打出一道横幅,上面写着:“你在飞机上!”飞行员很聪明,立刻判断出这是微软的总部,因为只有微软的人才会快速的做出这么一个正确但无用的答案。而我们的教课书上所写的一切知识,都与微软总部的人差不多,正确但无用!有时,我们更想知道的是用法,而不是一大堆定义性文字,有些时候,我们只要知道怎么用就行了,至于为什么可以这么用,我们是不用知道的。
我们可以非官方的说,Session是存在于网页浏览或网页程序执行过程中的全局型会话变量,在限定的时间内,只要浏览器不关闭,该变量的值就存在,我们可以很方便的调用它。比如给一个Session赋值,我们可以写成:
Session(“username”)=”听雪堂主”
我们先说说Session在网络编程中的最常用的用法之一,保存登录用户信息。先来看看著名的MFXlogin插件生成的用户登录代码:
<%
Dim myconnection__strUserID
myconnection__strUserID = "x"
if (Request.Form("UserID") <> "") then myconnection__strUserID = Request.Form("UserID")
%>
<%
Dim myconnection__strPassword
myconnection__strPassword = "1"
if (Request.Form("Password") <> "") then myconnection__strPassword = Request.Form("Password")
%>
//上面一段是读取表单变量值,分别赋值给myconnection__strUserID和myconnection__strPassword
<%
set myconnection = Server.CreateObject("ADODB.Recordset")
myconnection.ActiveConnection = MM_conn_STRING
myconnection.Source = "SELECT * FROM DB_userlist WHERE username = '" + Replace(myconnection__strUserID, "'", "''") + "' AND userpass = '" + Replace(myconnection__strPassword, "'", "''") + "'"
myconnection.CursorType = 0
myconnection.CursorLocation = 2
myconnection.LockType = 3
myconnection.Open()
myconnection_numRows = 0
%>
//在数据库中查询用户名等于myconnection__strUserID变量值且用户密码等于myconnection__strPassword变量值的记录
<%
If myconnection__strUserID <> "x" Then
If Not myconnection.EOF Then
//如果查询结果不为空,则
Session("username")=myconnection.Fields.Item("username").value
Session("useraccess")=myconnection.Fields.Item("uaccess").value
//设置Session("username")会话变量,将myconnection.Fields.Item("username").value赋值给它,用以记录登录用户名。设置Session("useraccess")会话变量,将myconnection.Fields.Item("uaccess").value赋值给它,用以记录登录用户的级别
Response.Redirect "default.asp"
//登录成功,转回首页
else
Response.Redirect "error.asp?err=4"
//登录失败,转向出错页
End If
End If
%>
这样,用户登录成功以后,我们就产生了两个会话就量:记录登录用户名的Session("username")和记录登录用户级别的Session("useraccess")。设置完成后,以后想使用它是很方便的,而且使用频率也是很高的。如果你能很好的应用它,你的页面会更加丰富多彩的。为了更好的使用它们,我们可以按下面的步骤来设置一下:应用程序面板→绑定→+号→阶段变量,如下图:

打开一个对话框,在名称中输入:username
再进行上面的步骤,不同的是这一回在名称里输入的是:useraccess
最终在绑定面板下产生了下面两个阶段变量,如下图:





Session应用实例之一:显示登录用户名
现在我们可以回答一个在论坛里经常会碰到的菜鸟的问题,怎么样才可以显示登录用户的名字呢?答案是:把阶段变量username拖到你想的位置即可。不会吧,这么简单?不错,正是这么简单,这个简单的前提是:你的登录代码和我的是一样的,或者说,你的登录代码也在登录成功之后设置也session(“username”)和session(“useraccess”)这两个阶段变量。我们切换到代码视图,看看显示用户名的那一段代码是怎么写的,结果是:
<%=session(“username”)%>
不错,正是这么写的。菜鸟们学到这一步的时候,应该已经会高兴得跳了起来,但稍有些水平的朋友却不会满足,Session就只有这么一点儿用处吗?呵呵,当然不是,用处大了,不过你得耐着性子再看下去,反正听雪写这么多都不觉得累,你只看一看,不应该会有那么累吧。
Session应用实例之二:动态登录窗口
做一个动态站点,一般都会允许用户登录发表意见,登录那一块一般是下面这个样子:




大部分网站都一样,不管用户登录与否,这里是一成不变的,看起来一点儿也不高明,不能令听雪佩服。那么,看看听雪的登录窗口的样子吧(右图:当然,听雪的登录窗口是在首页里整合的,并没有单独的登录窗口):这个登录窗口分两部分,上半部分和别人一样,没有什么出奇之处,出奇的是多了个下半部分。在浏览器中,未登录前,只显示上半部分,登录以后,只显示下半部分,另,如果登录用户有网站管理和论坛管理和权限,这两项才显示,不然也是不显示的。这个要怎么才能实现呢?是不是很难啊?听雪答:不难,一点都不难,很简单。
我们先分别做出这两个表格内容,全部完成后,在第一个表格之前加入代码:<% if session("username")="" then %>,即当session(“username”)阶段变量为空时,显示第一个表格。在第一个表格之后第二个表格之前加入<% else %>,“否则显示第二个表格”,呵呵,这一句话大家应该不用我教就会脱口而出了吧,不要忘了在第二个表之后加入代码<% end if %>,不然会出错的哦!
Session应用实例之三:如果用户未登录,则转向登录页
有些页面,我们会对用户作一些限制,比如发表文章的页面,没有登录的用户就不能进去,我们可以切换到代码页面,在下面这句代码:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
下写写如下一段:
<% if session(“username”)=”” then
response.redirect "login.asp"
response.end
end if %>
这样,当未登录用户访问本页面时,浏览器便会自动引导他到登录页面。
Session应用实例之四:自动填写用户名
在发表文章的表单中,一般都有一项用户名的表单域,由用户在里面填上自己的名字,但如果该用户登录且我们为其设置了session(“username”),那就不用他自己填了,而且那一项表单域也不再显示出来,我们可以把它设置成隐藏域,其默认值为<%=session(“username”)%>就行了,方便吧。
Session应用实例之五:根据用户级别限制用户访问
DW里有限制用户访问的服务器行为,但显然没有我们自己手写来得自由,看看下面的代码大家就明白了:
<% if session("userAccess")<>"4" and session("userAccess")<>"5" then
response.redirect "error.asp?err=5"
end if %>
这段代码的意思是:如果登录用户的级别不等于4也不等于5(至于级别4和级别5是什么,你自己设置吧,我的页面你就不用问了),则转入出错页面。其中4和5都是用户级别的编号。当然,这里你也可以加上更多的判断,判断越多,IF结构就越复杂,自己慢慢掌握吧。
好了,就说到这儿吧。Session的功用很多,不至听雪提到的这几条,听雪在这里只是给大家一个思路而已。希望大家能从本文中得到一点儿启发,发挥出session的更大功用来,那样,听雪也就满足了。好累,睡觉去也!!
标签集:TAGS:
回复Comments() 点击Count()

回复Comments

{commentauthor}
{commentauthor}
{commenttime}
{commentnum}
{commentcontent}
作者:
{commentrecontent}