关键词:asp, ado
这是近来用asp改写ubb论坛的体会,不当之处请多多指正
可参照chinaasp的网页俱乐部(就是个ubb风格的论坛)
ubb论坛有个非常好的特点,就是会标志自您上次访问以来新增的贴子,主要在两个地方
:讨论区列表和某一讨论区的帖子列表。
通常所用的图形为on.gif,off.gif(讨论区列表),closed.gif,closedb.gif(某一讨论区的
贴子列表),其中on.gif,closedb.gif表示自上次访问后新增或修改过的贴子。
实现:
通过综合使用session和cookie变量来实现
1、session变量
firstin, 标识是否第一次进入该页面,还是通过刷新进入该页面
2、cookie变量
这里作了简化,取消了原正式版ubb中的sessionlogin/lastlogin两个cookie
只使用sessionlogindt/lastlogindt两个cookie
sessionlogindt-保存上次登录的时间
lastlogindt-保存本次登录的时间
原理:
取上次登录时间为本此会话时间,并将此时间同讨论区最后一个贴子的时间或某一讨论区各
主题的最后时间比较,根据实际情况选择适当的图形,如:
if rslist.fields("status")="close" then
'主题关闭
response.write "<tr><td bgcolor=#f7f7f7><img
src=images/lock.gif > <a href=newsdetail.asp?id=" & rslist.fields
("postid") & ">" & rslist.fields("subject") & "</a> </td>"
else
'lastly为主题的post时间
if rslist.fields("lastly")>sessionlogindt then
response.write "<tr><td bgcolor=#f7f7f7><img
src=images/closedb.gif> <a href=newsdetail.asp?id=" & rslist.fields
("postid") & ">" & rslist.fields("subject") & "</a> </td>"
else
response.write "<tr><td bgcolor=#f7f7f7><img
src=images/closed.gif > <a href=newsdetail.asp?id=" & rslist.fields
("postid") & ">" & rslist.fields("subject") & "</a> </td>"
end if
end if
页面:讨论区列表(default.asp)
代码片段:
if isempty(session("firstin")) then
'第一次进入或不允许使用cookie
'取上次访问时间并赋值给sessionlogindt
if not isempty(request.cookies("lastlogindt")) then
sessionlogindt=request.cookies("lastlogindt")
if not isdate(sessionlogindt) then
sessionlogindt=formatdatetime(now)
else
sessionlogindt=cdate(sessionlogindt)
end if
else
sessionlogindt=formatdatetime(now)
end if
'写cookies
'写sessionlogindt
response.cookies("sessionlogindt")=sessionlogindt
response.cookies("sessionlogindt").expires=date+365
response.cookies("lastlogindt")=lastlogindt
response.cookies("lastlogindt").expires=date+365
session("firstin")="yes"
else
'刷新,同时说明允许cookie
session("firstin")="no"
'读时间
if not isempty(request.cookies("sessionlogindt")) then
sessionlogindt=request.cookies("sessionlogindt")
'sessionlogindt不合法,一般不存在此问题
if not isdate(sessionlogindt) then
sessionlogindt=formatdatetime(now)
else
sessionlogindt=cdate(sessionlogindt)
end if
else
'没有sessionlogindt cookie,一般不存在此问题
sessionlogindt=formatdatetime(now)
'写sessionlogindt
response.cookies("sessionlogindt")=sessionlogindt
response.cookies("sessionlogindt").expires=date+365
end if
end if
页面:某讨论区贴子列表:list.asp
代码举例:
dim sessionlogindt
if not isempty(request.cookies("sessionlogindt")) then
sessionlogindt=request.cookies("sessionlogindt")
if not isdate(sessionlogindt) then
sessionlogindt=formatdatetime(now)
else
sessionlogindt=cdate(sessionlogindt)
end if
else
'不存在此cookie,一般不存在此问题
sessionlogindt=formatdatetime(now)
'写cookie
response.cookies("sessionlogindt")=sessionlogindt
response.cookies("sessionlogindt").expires=date+365
end if
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器