ASP编程入门进阶(八):内置对象Session
程序员文章站
2024-01-27 12:56:40
asp对象中除了用于发送(response)、接收和处理数据(requeest)、服务器访问(server)的对象外,还有一些非常实用的标记active server应用程...
asp对象中除了用于发送(response)、接收和处理数据(requeest)、服务器访问(server)的对象外,还有一些非常实用的标记active server应用程序(application)和单个用户信息(session)的对象。
session对象
该对象在asp使用中占相当大的比例。由于网页是一种无状态程序,无法得知用户浏览状态。在asp中,通过session对象来记录使用者私有的数据变量,以作为用户再次对服务器提出要求时做确认,用户在程序的web页面之间跳转时,存在session对象中的变量将不会消失。
这些真的是很重要的功能,尤其是有会员的系统必须要用到的。像是会员的登入账号、时间、状态以及许许多多该记录的实时数据(如购物系统记录使用者的购物篮内的商品),这些信息属于各使用者私人所需要,通常开发者都是使用 session 记录处理。
在asp中的session是使用cookies构成,服务器将所有的session内记录的数据,以cookies的方式传至用户的浏览器。通常一般浏览器会将这些cookies存起来,每当使用者点选连结,再次与服务器做联机时,浏览器就会把这些cookies传回server供做处理:这即是session的运作原理。由此可知会话状态session仅在支持cookie的浏览器中保留,如果客户关闭了cookie 选项session也就不能发挥作用了。
一、session.sessionid
sessionid 属性返回用户的会话标识。在创建会话时,服务器会为每一个会话生成一个单独的标识,会话标识以长整形数据类型返回。在很多情况下 sessionid 可以用于 web 页面注册统计。
利用该属性可以解决一种对用户的控制问题。该问题的主要功能就是,针对某个网站的一个模块,当一个会员登录后正在看此模块时,另一个人用同样的会员名登录,就不能浏览这个模块:也就是说一个会员名同时只能一个人浏览此模块。
通过用会员名(假设为userid,唯一)和sessionid来实现了控制。当会员登录时,给这个会员一个session记录登录状态如:session("status")="logged",同时把这个会员的session.sessionid写入数据库。当他要浏览此模块时,先判断其是否登录,若已经登录再判断它的sessionid是否与数据库记录的相同,如果不同则不能访问。
这样,当另一个用户用相同的会员名登录时,那么数据库中记录的就是新的sessionid,前者访问此模块时就不能通过检查。这就实现了一个会员名同时只能一个人浏览某个模块。这个功能在一些收费网站有很有特别作用,它防止了一个会员名给多个人浏览的问题,为公司保障了利益。
二、session.timeout
该属性设置的session的最大间隔时间。间隔时间是指客户器端从最近一次向web服务器提出要求,到下一次向web服务器提出要求的时间。可以理解为:如果用户在该超时时限之内不刷新或请求网页,则该会话将终止。timeout 属性是以分钟为单位,为该应用程序的session对象指定超时时限的,一般默认为20分钟。这在网吧等公共场所,登录个人信息页而忘记关闭窗口时,显得比较重要(至少可以把时间设短些)。
以上sessionid、timeout属于session对象的两个属性,下面看该对象的一个方法abandon
三、session.abandon
该方法是session对象的唯一方法,可以清除session对象,用来消除用户的session对象并释放其所占的资源。当然你如果没有明确调用abandon方法,一旦会话超时,服务器也会将删除这些对象并释放资源。
下面就用两个页的程序来认识session对象以及abandon方法的利用。
1,login.asp
注意session("name")为空和不为空的时候,都做了一个到info.asp的链接,具体调试结果如何,再来看info.asp的内容。
2,info.asp
可以看出来,info.asp页面内容的显示其实是需要条件的。那就是必须得有一个session值的存在,这样才可以显示具体的信息。这在登录系统中运用得比较多。
你可以把login.asp想象成一个登录窗口,当然我的这个比较简单(只要输入用名和密码就生产session了),实际情况是:判断输入的用名和密码是否和数据库中的用名和密码吻合,如果正确吻合才生成session的。然info.asp页面的作用刚好可以做为一权限页面,因为进入该页需要session,而session的产生是确保用名密码正确的。
所以当一开始出现表单窗口时,你点login.asp链接是打不开的,只有当提交了表单生成了session后才能进入。这正是登录系统的精髓所在,do you know?:)
四、session_onstart
session_onstart属于session对象的一类事件。它是在服务器创建新会话时发生的。服务器在执行请求的页之前先处理该脚本。session_onstart 事件是设置会话期变量的最佳时机,因为在访问任何页之前都会先设置它们。
对象的例程每一次启动时触发session_onstart事件,然后运行session_onstart事件的处理过程。也就是说,当服务器接收到应用程序中的url的http请求时,触发此事件,并建立一个session对象。
当然说到session_onstart事件就不能不谈到一个文件global.asa(p.s:我打算把该文件和chat程序放在一起说的,所以现在先不作过多解释)
具体用法先透露,写在global.asa文件内部
五、session_onend
一看也就知道是session对象的另一类事件了。当调用session.abandon方法时或者在timeout的时间内没有刷新,这会触发session_onend事件,然后执行里面的脚本。同样具体用法在后面将写的global.asa文件专题中详细介绍到,简单语法如下:
最后,不知道大家有没有玩过这样的一个程序:很令人讨厌的,让你永远关不掉的程序页面。
只做程序调试,不要去作弄别人。
以下文件保存为bug.html
[ctrl+a 全部选择进行拷贝 提示:可先修改部分代码,再点击运行]
发现该文件关不了了?(当然你要关闭,把源代码修改下)
那现在的要求是:计算关闭的次数,如果超过多少次就可以自行关闭,那下面就采用到session
以下文件保存为bug.asp
呵呵,当你关闭三次以后,窗口就再也不弹出了。了解吧:)
以上就是对session对象的系统学习。
session对象
该对象在asp使用中占相当大的比例。由于网页是一种无状态程序,无法得知用户浏览状态。在asp中,通过session对象来记录使用者私有的数据变量,以作为用户再次对服务器提出要求时做确认,用户在程序的web页面之间跳转时,存在session对象中的变量将不会消失。
这些真的是很重要的功能,尤其是有会员的系统必须要用到的。像是会员的登入账号、时间、状态以及许许多多该记录的实时数据(如购物系统记录使用者的购物篮内的商品),这些信息属于各使用者私人所需要,通常开发者都是使用 session 记录处理。
在asp中的session是使用cookies构成,服务器将所有的session内记录的数据,以cookies的方式传至用户的浏览器。通常一般浏览器会将这些cookies存起来,每当使用者点选连结,再次与服务器做联机时,浏览器就会把这些cookies传回server供做处理:这即是session的运作原理。由此可知会话状态session仅在支持cookie的浏览器中保留,如果客户关闭了cookie 选项session也就不能发挥作用了。
一、session.sessionid
sessionid 属性返回用户的会话标识。在创建会话时,服务器会为每一个会话生成一个单独的标识,会话标识以长整形数据类型返回。在很多情况下 sessionid 可以用于 web 页面注册统计。
利用该属性可以解决一种对用户的控制问题。该问题的主要功能就是,针对某个网站的一个模块,当一个会员登录后正在看此模块时,另一个人用同样的会员名登录,就不能浏览这个模块:也就是说一个会员名同时只能一个人浏览此模块。
通过用会员名(假设为userid,唯一)和sessionid来实现了控制。当会员登录时,给这个会员一个session记录登录状态如:session("status")="logged",同时把这个会员的session.sessionid写入数据库。当他要浏览此模块时,先判断其是否登录,若已经登录再判断它的sessionid是否与数据库记录的相同,如果不同则不能访问。
这样,当另一个用户用相同的会员名登录时,那么数据库中记录的就是新的sessionid,前者访问此模块时就不能通过检查。这就实现了一个会员名同时只能一个人浏览某个模块。这个功能在一些收费网站有很有特别作用,它防止了一个会员名给多个人浏览的问题,为公司保障了利益。
<%=session.sessionid%> 是单独生成的唯一id标识,可刷新调试。 |
二、session.timeout
该属性设置的session的最大间隔时间。间隔时间是指客户器端从最近一次向web服务器提出要求,到下一次向web服务器提出要求的时间。可以理解为:如果用户在该超时时限之内不刷新或请求网页,则该会话将终止。timeout 属性是以分钟为单位,为该应用程序的session对象指定超时时限的,一般默认为20分钟。这在网吧等公共场所,登录个人信息页而忘记关闭窗口时,显得比较重要(至少可以把时间设短些)。
<%session.timeout=10%> |
以上sessionid、timeout属于session对象的两个属性,下面看该对象的一个方法abandon
三、session.abandon
该方法是session对象的唯一方法,可以清除session对象,用来消除用户的session对象并释放其所占的资源。当然你如果没有明确调用abandon方法,一旦会话超时,服务器也会将删除这些对象并释放资源。
下面就用两个页的程序来认识session对象以及abandon方法的利用。
1,login.asp
<% '是提取url中变量loginout的值是否为true,若为真,就执行session.abandon()。 if request.querystring("loginout")="true" then session.abandon() end if '只有在当点击了submit按钮的前提下,再来判断提取的东西都不为空,则建立session对象。 submitname=request.form("submit1") if submitname="submit" then if request.form("name")<>"" and request.form("pwd")<>"" then session("name")=request.form("name") session("pw")=request.form("pwd") end if end if %> <% '如果session("name")不为空,则显示session("name")的值,并且做一个到info.asp的链接。 if session("name")<>"" then response.write("你的name值是:"&session("name")) response.write("<br><a href='info.asp'>显示你的资料</a>") else '否则,即session("name")为空不存在,则显示表单用以输入建立session的平台。 %> <form action="login.asp" method="post"> 姓名:<input type="text" name="name"><br> 密码:<input type="password" name="pwd"><br> <input type="submit" value="submit" name="submit1"> </form> <!--同样做了一个到info.asp的链接。--> <a href="info.asp">显示你的资料</a> <%end if%> |
注意session("name")为空和不为空的时候,都做了一个到info.asp的链接,具体调试结果如何,再来看info.asp的内容。
2,info.asp
<% '如果session对象值为空则跳转到login.asp if session("name")="" then response.redirect("login.asp") '否则就显示个人信息 else response.write("你的姓名:"&session("name")&"<br>") response.write("你的密码:"&session("pw")&"<br>") end if %> <a href="login.asp">返回</a> <a href="login.asp?loginout=true">退出</a> |
可以看出来,info.asp页面内容的显示其实是需要条件的。那就是必须得有一个session值的存在,这样才可以显示具体的信息。这在登录系统中运用得比较多。
你可以把login.asp想象成一个登录窗口,当然我的这个比较简单(只要输入用名和密码就生产session了),实际情况是:判断输入的用名和密码是否和数据库中的用名和密码吻合,如果正确吻合才生成session的。然info.asp页面的作用刚好可以做为一权限页面,因为进入该页需要session,而session的产生是确保用名密码正确的。
所以当一开始出现表单窗口时,你点login.asp链接是打不开的,只有当提交了表单生成了session后才能进入。这正是登录系统的精髓所在,do you know?:)
四、session_onstart
session_onstart属于session对象的一类事件。它是在服务器创建新会话时发生的。服务器在执行请求的页之前先处理该脚本。session_onstart 事件是设置会话期变量的最佳时机,因为在访问任何页之前都会先设置它们。
对象的例程每一次启动时触发session_onstart事件,然后运行session_onstart事件的处理过程。也就是说,当服务器接收到应用程序中的url的http请求时,触发此事件,并建立一个session对象。
当然说到session_onstart事件就不能不谈到一个文件global.asa(p.s:我打算把该文件和chat程序放在一起说的,所以现在先不作过多解释)
具体用法先透露,写在global.asa文件内部
<script runat=server language=vbscript> ....... sub session_onstart ....... end sub ....... </script> |
五、session_onend
一看也就知道是session对象的另一类事件了。当调用session.abandon方法时或者在timeout的时间内没有刷新,这会触发session_onend事件,然后执行里面的脚本。同样具体用法在后面将写的global.asa文件专题中详细介绍到,简单语法如下:
<script runat=server language=vbscript> ....... sub session_onend ....... end sub ....... </script> |
最后,不知道大家有没有玩过这样的一个程序:很令人讨厌的,让你永远关不掉的程序页面。
只做程序调试,不要去作弄别人。
以下文件保存为bug.html
[ctrl+a 全部选择进行拷贝 提示:可先修改部分代码,再点击运行]
发现该文件关不了了?(当然你要关闭,把源代码修改下)
那现在的要求是:计算关闭的次数,如果超过多少次就可以自行关闭,那下面就采用到session
以下文件保存为bug.asp
<%if session("num") < 2 then%> <body onunload=javascript:window.open("bug.asp")> <%session("num")=session("num")+1%> <%else%> <script> self.close() </script> <%end if%> |
呵呵,当你关闭三次以后,窗口就再也不弹出了。了解吧:)
以上就是对session对象的系统学习。