520 likes | 624 Views
第四章 Session 和 Application 对象. • Session 对象记载某一特定的客户信息,不同的客户用不同的 Session 对象来记载 • Application 对象记载所有访问该应用程序的客户信息. 4.1 利用 Session 对象记载特定客户信息. • Session 对象记载某一特定的客户信息,不同的客户用不同的 Session 对象来记载 • Session 对象有效期:默认为 20 分钟,可设定
E N D
第四章 Session和Application对象 • Session对象记载某一特定的客户信息,不同的客户用不同的Session对象来记载 • Application对象记载所有访问该应用程序的客户信息
4.1 利用Session对象记载特定客户信息 • Session对象记载某一特定的客户信息,不同的客户用不同的Session对象来记载 • Session对象有效期:默认为20分钟,可设定 • Session工作原理:在应用程序中,当客户端启动一个Session时,ASP会自动生成一个SessionID,并将该SessionID回送客户端浏览器,而浏览器则将该SessionID保存在Cookies中。当客户端再次向服务器发出HTTP请求时。ASP检查申请表头的该SessionID,并回应相应该SessionID的该Session信息。
4.1.1 Session对象简介 • Session对象的属性 SessionID:存储用户的SessionID Timeout: Session的有效期长度 • Session对象的方法 Abandon:清除Session对象 • Session对象的事件 Session_OnStart:该Session“开始前”所执行的程序 Session_OnEnd: 该Session“结束后”所执行的程序
4.1.2 利用Session存储信息 •格式: Session(“名字”)=变量/字符串 •例如: <% Session(“user_name”)=hisname Session(“age”)=20 Session(“college”)=“上海大学” %>
4.1.3 Session用法示例 <% Dim user_name,age user_name="卓云" age=22 Session("user_name")=user_name Session("age")=age Response.write "<a href='5-2.asp'>单击显示用户名</a>" %>
<%Option Explicit %> <html> <head> <title>5-2.asp </title> </head> <body> <% Dim user_name user_name=Session("user_name") Response.Write user_name & "您好,欢迎您<br>" Response.Write "您的年龄是" & Session("Age") %> </body> </html>
4.1.4 利用Session存储数组信息 • Session存储数组与存储单个变量的方法基本上一样的,但Session将传入的数组视为一个整体,只能对整个数组进行整体存取,而不能对数组元素分别进行存取。 • 例如: <%Session(“arry”)(4)=“埔东新区”%> 是不可以的。
4.1.4 Session存储数组示例 <% Dim user_name() Redim user_name (5) user_name(0)="白芸" user_name(1)="赵敏" Session("arry_user_name")=user_name '传入数组到Session对象 Response.Write "<a href='5-4.asp'>单击显示数组信息</a>" %>
4.1.4 Session存储数组示例 <% Dim user_name ’注意声明方式,未加扩号 user_name=Session("arry_user_name") '返回Session数组元素 Response.Write user_name(0) & "您好,欢迎您<br>" Response.Write user_name(1) & "您好,欢迎您<br>" %>
4.1.5 Timeout属性 • 格式: Session.Timeout=<整数(分钟)> • 例如: <%Session.Timeout=30 %> 如设定值小于默认值20分钟,则仍以默认值为准。
4.1.6 Abandon属性 • 格式: Session. Abandon • 例如: <% Session(“user_name”)=“布什” Session. Abandon Response.Write Session(“user_name”) %>
4.2 利用Application对象记载所有客户信息 Session对象记载特定客户信息,而Application对象记载所有的客户信息。通过Application对象,所有的客户可以相互交流信息,典型的如聊天室,大家的发言均放在同一个Application对象中。这样一来,彼此就可以看到发言内容。
4.2.1 Application对象简介 • Application对象是所有客户一起使用的。通过该对象,所有客户均可存取Application定义的同一名称的参数。 • Application对象的有效期没有限制,直到应用程序停止。 • Application对象的方法与事件
4.2.1 Application对象简介 • Application对象的方法与事件 Lock:锁定Application对象 Unlock:解除锁定 Application_OnStart:该Application “开始前”所执行 的程序 Application_OnEnd:该Application “结束后”所执行 的程序
4.2.2 利用Application存储信息 •格式: Application(“名字”)=变量/字符串 •例如: <% Application.Lock Application.(“user_name”)=user_name Application.(“school”)=“清华大学” Application.Unlock %>
4.2.2 Application用法示例 <form action="" method="post" name="form1"> 请发言:<input type="text" name="pronunciation" size="30"> <input type="submit" VALUE=" 确 定 "> </form> <% If trim(request("pronunciation"))<>"" Then Application.Lock Application("show")= request("pronunciation") & "<br>" & Application("show") Application.Unlock End if Response.Write Application("show") %>
4.2.2 Application用法示例 •计数器 <% Application.Lock Application(“counter”)= Application(“counter”)+1 Application.Unlock Response.Write “您是第”& Application(“counter”)&”访客” %>
4.2.3 利用Application存储数组信息 • 与利用Session存储数组类似,Application存储数组信息时也同样要将数组作为一个进行存取,而且要在存储前后使用Lock和Unlock。 • 读取: <% Dim user_name User_name=Application(“array_user_name”) Response.Write user_name(0)&”您好!<br>” %>
4.2.3 利用Application存储数组信息(续) • 存储: <% Dim user_name() Redim user_name(5) user_name(0)=“普京” Application.Lock Application(“array_user_name”)=user_name Application.Unlock %>
4.3 Global.asa文件 • Global.asa文件的功能是定义Session、Application对象事件所对应的程序。当Session或Application第一次被调用或结束时,将运行该文件中对应的程序。 • 注意 • 文件必须文本文件,文件名必须是Global.asa,且必须存放在应用程序的根目录下。 • 在Global.asa中,不能写成<%…%>格式。 • 在Global.asa中,不能包含任何输出语句。
Global.asa文件格式 <Script language=“VBScript” runat=“server”> Sub Application_OnStart ‘子程序 End Sub Sub Application_OnEnd ‘子程序 End Sub Sub Session_OnStart ‘子程序 End Sub Sub Session_OnEnd ‘子程序 End Sub </Script>
Global.asa示例: <SCRIPT language="VBScript" runat="server"> Sub Application_OnStart Application.Lock Application("user_online")=0 Application.Unlock End Sub Sub Session_OnStart Application.Lock Application("user_online")= Application("user_online")+1 Application.Unlock end sub Sub Session_OnEnd Application.Lock Application("user_online")= Application("user_online")-1 Application.Unlock End Sub </SCRIPT>
5-7.asp <% Option Explicit %> <html> <head> <title>显示网站在线人数</title> </head> <body> <h2 align="center">我的个人主页</h2> <% Response.Write "<p align='center'>当前共有" & Application("user_online") & "人在线" %> </body> </html>
第五章 ASP存取数据库 本章重点: • ASP与数据库连接的基本方法 • ASP对数据库的在线操作方法
5.1 数据库预备知识 SQL Server Oracle Access 由于使用标准SQL语言,存取Access数据库与存取SQL Server/Oracle数据库基本上是一样的,后台数据库的变化对ASP源程序没有什么影响,只需相应改变数据库的连接语句就可以了。
5.1.1 建立Access数据库 在Access数据库系统中示范
5.1.2 设置数据源 在Windows系统中示范
5.2 利用数据源存取组件存取数据库 ODBC,Open DataBase Connection ADO,ActiveX Data Objects, • 提供Web页面与数据库结合的数据库技术,可以将传统的数据库后台管理模式放到前台的Web页面上来进行,是得数据库的存取更新简单、方便。 • Connection、Command和Recordset 三个对象
5.2.1 数据库连接方法 <% Dim db Set db=Server.Createobject(“ADODB.Connection”) db.Open”WWWlink” ‘打开数据源WWWlink >% 注意:第三句打开的是数据源WWWlink,不是数据库WWWlink.bdb,数据源与数据库可以同名,也可以不同名。
5.2.1 数据库连接方法(续) <% Dim db Set db=Server.Createobject(“ADODB.Connection”) db.Open “Dbq=”&Server.Mappath(“wwwlink.mdb”)&”;Driver={Microsoft Access Driver(*.mdb)}” >%
5.2.2 利用Select语句查询记录 Select 字段列表 From 数据表列表 [Where 条件][Order By 字段] 例: Select name,URL,intro From link Select * From link Select * From link Where name=“新浪” Select * From link Order By link_id
5.2.2 利用Select语句查询记录例 <% '以下连上数据库,建立一个Connection对象实例db dim db set db=Server.Createobject("ADODB.Connection") db.Open "DBQ="&Server.Mappath("WWWAccess.mdb")&";DRIVER={Microsoft Access Driver (*.mdb)};" '以下建立Recordset对象实例rs dim strsql,rs strsql="select * from link order by link_id desc" set rs=db.Execute(strsql) %>
5.2.2 利用Select语句查询记录例 <% do while not rs.Eof '只要不是结尾就执行循环 %> <tr> <td><%=rs("Name")%></td> <td><aref="http://<%=rs("URL")%>"target="new">_ <%=rs("URL")%></a></td> <td><%=rs("Intro")%></td> <td><a href="6-3.asp?link_id=<%=rs("link_id")%>">删除</a></td> <td><a href="6-4.asp?link_id=<%=rs("link_id")%>">修改</a></td> </tr> <% rs.movenext '将记录集指针移动到下一条记录 loop %>
5.2.3 利用Insert语句添加记录 Insert Into 表名(字段1,字段2,…) Values(字段值1,字段值2,…) 例如: Insert Into link(name,URL,intro) Values(“中国教科网”,www.edu.cn,”中国教科网站”)
<form action="" method="post" name="form1"> <tr> <td>网站名字</td><td><input type="text" name="name" size=20></td> </tr><tr> <td>网站网址</td><td><input type="text" name="URL" size=60></td> </tr><tr> <td>网站简介</td><td> <textarea name="Intro" rows="2" cols="60" wrap="soft"></textarea></td> </tr><tr> <td><input type="submit" value=" 确 定 "></td> </tr> </form>
<% If Request("name")<>"" and Request("URL")<>"" and Request("intro")<>"" Then dim db set db=Server.Createobject("ADODB.Connection") db.Open "DBQ="&Server.Mappath("wwwaccess.mdb")&";DRIVER={Microsoft Access Driver (*.mdb)};" Dim strSql,varName,varURL,varIntro varName=Request("name") varURL=Request("URL") varIntro=Request("intro") StrSql="insert into link(name,URL, intro,submit_date) values('" &varName & "','" & varURL & "','" & varIntro & "','" & Date() & "')" %> <%=StrSql%> <% db.execute(strSql) Response.Redirect "6-1.asp" Else Response.Write "请将所有信息填写完整" End If %>
带有查错功能: Dim strSql,varName,varURL,varIntro varName=Request("name") varURL=Request("URL") varIntro=Request("intro") StrSql="insert into link(name” sValues= “values('" &varName & "‘” If varURL<>”” then strSql=strSql&”,URL” sValues= sValues& “,'" & varURL & "‘” End If …
5.2.4 利用Delete语句删除记录 Delete From 表名 [Where 条件] 例如: Delete From link Where name=“网易”
5.2.4 利用Delete语句删除记录例 dim db set db=Server.Createobject("ADODB.Connection") db.Open "DBQ="&Server.Mappath("WWWAccess.mdb")&";DRIVER={Microsoft Access Driver (*.mdb)};" '以下删除记录,注意这里是由6-1.asp传过来的要删除的记录的记录编号 Dim varLink_id,strSql varLink_id=Request.QueryString("link_id") strSql="delete from link where link_id=" & varLink_id db.Execute(strSql) '这里利用Execute方法,删除记录 Response.Redirect "6-1.asp" '删除完毕,返回首页6-1.asp
5.2.5 利用Update语句修改记录 Update 数据库表名 Set 字段1=值1,字段2=值2,… [Where 条件] 例如: Update link Set intro=“赢利网站” Where name=“新浪”
<% '首先根据传入的Link_ID将原有数据显示在表单内 Dim varLink_id varLink_id=Request.QueryString("link_id") dim db set db=Server.Createobject("ADODB.Connection") db.Open "DBQ="&Server.Mappath("WWWAccess.mdb")&";DRIVER={Microsoft Access Driver (*.mdb)};" Dim strSql,rs strSql="select * from link where link_id=" & varLink_id 'varLink_id是传过来的 set rs=db.Execute(strSql) %> <center> <table border="1" width="90%"> <form action="" method="post" name="form1"> <tr> <td>网站名字</td><td><input type="text" name="name" size=20 value="<%=rs("Name")%>"></td> </tr>
<tr> <td>网站网址</td><td><input type="text" name="URL" size=60 value="<%=rs("URL")%>"></td> </tr><tr> <td>网站简介</td><td> <textarea name="Intro" rows="2" cols="60" wrap="soft"><%=rs("Intro")%></textarea></td> </tr><tr> <td><input type="submit" value=" 确 定 "></td> </tr> </form> </table> </center>
<% '如果上面的信息填全了,就修改记录,否则给出错误信息 If Request("name")<>"" AND Request("URL")<>"" AND Request("intro")<>"" Then '以下修改记录 Dim varName,varUrl,varIntro varName=Request(“name”) varURL=Request("URL") varIntro=Request("intro") StrSql="update link set name='" & varName & "',URL='" & varURL & "',intro='" & varIntro & "' where link_id=" & varLink_id db.Execute(strSql) '这里利用Execute方法,修改记录 Response.Redirect "6-1.asp" '修改完毕,返回首页6-1.asp Else Response.Write "请将所有信息填写完整" End If %>
5.3.1 存取SQL数据库(一) <% Dim db Set db=Server.Createobject(“ADODB.Connection”) Db.Open “wwwlink”,”myusername”,”mypassword” %>
5.3.1 存取SQL数据库(二) <% Dim db Set db=Server.Createobject(“ADODB.Connection”) Db.Open “Database=wwwlink;Uid=myusername;Pwd=mypassword;Driver={SQL Derver}” %>
5.3.2 对多个数据库进行操作 • 基本情况表TA: student_id, password, name • 详细情况表TB: student_id, department, age • 组合查询 显示学生的学号、姓名、年龄、系别