Ⅰ 如何统计某个页面的在线人数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/**
* 取在线用户 + 1
*/
public void IncrementOnlineUser(javax.servlet.HttpServletConext context) {
synchronized(context) {
Object onlineUsers = context.getAttribute("online-users");
if(onlineUsers == null) {
onlineUsers = 1;
} else {
onlineUsers = (int) onlineUsers + 1;
}
context.setAttriubte("online-users", onlineUsers);
}
}
/**
* 取在线用户
*/
public int getOnlineUser(javax.servlet.HttpServletConext context) {
Object onlineUsers = null;
synchronized(context) {
onlineUsers = context.getAttribute("online-users");
if(onlineUsers == null) {
onlineUsers = 0;
}
}
return (int)onlineUsers;
}
// 没有在ide里面写,试试可用否
Ⅱ asp.net 统计在线人数,以一分钟为准
用户保存在 服务器的会话状态为 session 通常判断用户是否在线也通过session来判断。 有两种方法 一种 将 session的过期时间设置为 1分钟
在配置文件中 添加 <sessionState mode="InProc" timeout="1"/> 如果网站有权限类操作。例如会员专属操作,那么这种方法将不适于网站。而必须采用另种方式。由于悬赏分少的可怜 我只大概描述方法1:
统计 在 global.asax 中进行 的
利用Application对象和Session对象可以统计当前在线用户数量。下面分别介绍这两个对象。
(1)Application对象是HttpApplication类的实例。它可以在多个请求、连接之间共享公用信息,也可以在各个请求连接之间充当信息传递的管道。此对象的生命周期起始于IIS开始运行并且有人开始连接时,终止于IIS关闭或者若干时间内无人连接时。当Application对象的生命周期开始时,Application_Start事件会被启动,当Application对象的生命结束时,Application_End事件会被启动。本实例中,当应用程序启动时,在Application_Start事件下初始化计数器。其代码如下。
//在应用程序启动时运行的代码
//初始化
Application["counter"]=0;
(2)Session对象是System.Web.UI.HttpSessionState类的实例。Session对象的所有引用都是在引用当前用户的会话对象,这个对象提供了字典风格的访问机制,当特定的用户不再访问Web站点上的页面时,一些信息将被丢掉。在新会话启动时,使计数器自增。关键代码如下。
//在新会话启动时运行的代码
//对Application加锁以防并行性
Application.Lock();
//增加一个在线人数
Application["counter"]=(int)Application["counter"]+1;
Application.UnLock(); //解锁
在会话结束时,使计数器自减。关键代码如下。
Application.Lock();
//减少一个在线人数
Application["counter"]=(int)Application["counter"]-1;
Application.UnLock(); //解锁
注意:
(1)在会话开始和结束时,一定要进行加锁(Application.lock)和开锁(Application.Unlock)操作。由于多个用户可以共享Application对象,因此对共享资源使用锁定是必要的,这样可以确保在同一时刻只有一个客户可以修改和存取Application对象的属性。如果将共享区加锁后,迟迟不给开锁,可能会导致用户无法访问Application对象。用户可以使用该对象的Unlock方法来解除锁定。这样可以保证在没有程序访问的情况下允许有一个客户可以使用Application对象的共享区。
(2)本实例主要是根据用户建立和退出会话来实现在线人数的增加、减少的,如果用户没有关闭浏览器,而直接进入其他URL,则这个会话在一定时间内是不会结束的,所以对用户数量的统计存在一定的偏差。当然,用户可以在Web.config文件中对会话Session的失效时间Timeout来设置,默认值为20分钟,最小值为1分钟。
实现过程
(1)新建一个网站,命名为Ex11_06,默认主页名为Default.aspx。
(2)在页面Default.aspx中添加3个Label控件,分别用来显示统计在线人数、当前在线人数、显示当前在线人的个数,然后在该网站中添加一个Global.asax全局应用程序文件。
(3)主要程序代码。
在Global.asax全局应用程序类中,设置当应用程序启动时初始化计数器,代码如下。
voidApplication_Start(objectsender,EventArgse)
{
//在应用程序启动时运行的代码
//初始化
Application["counter"]=0;
}
在新会话启动时,实现计数器加1,代码如下。
voidSession_Start(objectsender,EventArgse)
{
//在新会话启动时运行的代码
//对Application加锁以防并行性
Application.Lock();
//增加一个在线人数
Application["counter"]=(int)Application["counter"]+1;
//解锁
Application.UnLock();
}
在会话结束时,实现计数器减1,代码如下。
voidSession_End(objectsender,EventArgse)
{
//在会话结束时运行的代码。
//注意:只有在Web.config文件中的sessionstate模式设置为
//InProc时,才会引发Session_End事件。如果会话模式设置为StateServer
//或SQLServer,则不会引发该事件。
//对Application加锁以防并行性
Application.Lock();
//减少一个在线人数
Application["counter"]=(int)Application["counter"]-1;
//解锁
Application.UnLock();
}
在主页Default.aspx第一次加载时,将Application[“counter”]赋给Label.text,实现在界面上显示在线人数,其代码如下。
Label2.Text=Application["counter"].ToString();
Ⅲ 怎样记录web页面的访问次数
一个简单的网页浏览计数器代码
在一个ASP文件中的适当位置,加入下列代码:
<%
'一个简单的网页计数器
Set fs=CreateObject("Scripting.FileSystemObject")
Set a=fs.openTextFile(server.mappath("count.txt"))
count=a.readline
response.write " " & count
count=count+1
Set fs=CreateObject("Scripting.FileSystemObject")
Set a=fs.createTextfile(server.mappath("count.txt"))
a.writeline(count)
%>
保存ASP文件(比如:index.asp),发送到web服务器你的网站目录。
然后在该ASP文件所在的目录创建一个名叫count.txt的文件 (可以通过xp自带的记事本创建),在该count.txt文件中写上1,这样当网民浏览该ASP网页时,就能在适当位置看到1,并且每浏览一次该网页就增加一个数。
Ⅳ 网页人数统计代码
*global.asa文件:
<SCRIPT LANGUAGE="VBScript" RUNAT="Server">
Sub Session_OnStart
End Sub
Sub Session_OnEnd
End Sub
sub Application_OnStard
End Sub
sub Application_OnEnd
End Sub</SCRIPT>
当有一个会话发生时(用户浏览网页,向Web服务器发出请求)那么,如果自服务器启动后第一个用户的话,就会同时发生Application_OnStard和Session_OnStart这两个事件,之后,再有别的用户发出请求的话,就只发生Session_OnStart这个事件,而session的生存期是多长,是可以设定的,Session.timeout=X(分钟)
好了,有了这个很好用的方法,我们就能准确地统计出在线人数了,而人数总计是用一个application变量来保存,当在第一个会话开始时,在Application_OnStard事件中放置一条清空计数器的语句application("online")=0,然后,在Session_OnStart事件中,放置一条增加在线人数的语句application("online")=application("online") 1,而在Session_OnEnd事件相应地放一条减少在线人数的语句,令计数值减一。
这样,这个文件就改为如下
<SCRIPT LANGUAGE="VBScript" RUNAT="Server">
Sub Session_OnStart
application("online")=application("online") 1
End Sub
Sub Session_OnEnd
application("online")=application("online")-1
End Sub
sub Application_OnStard
application("online")=0
End Sub
sub Application_OnEnd
application("online")=0
End Sub</SCRIPT>
接下来编一个显示图形数字的程序,把在线人数显示在指定的页面上。这样就能得出在人数了
*online.asp
<% @language="vbscript" %>
<%
tmp=application("online")
tmp=Cstr(tmp)
dim disp(20)
dim images(20)
dbbits=len(tmp)
for I= 1 to dbbits
disp(I)=left(right(tmp,I),I-(I-1))
next
for I=dbbits to 1 step -1
images(I)="<img src="&"http://xxxx.com.cn/pic"&"/"&disp(I)&".gif>"
response.write "document.write('"&images(I)&"');"
next
%>
上面的程序很简单,这里不作分析了,请自己阅读一下。在调用在线统计的页面上用一句script语句引用online.asp文件,以显示图形统计器。
<script language="JavaScript" src="http://xxxx.com.cn/online.asp"></script>
这个页面需要服务器的ASP语言支持,请详细参考自己的服务器情况.
Ⅳ java网页中怎样统计在线人数
1.用session超时,session为null就表示下线了
2.也可以采用数据库中设置 临时表 来处理
一个用户登陆时向表中插进一条记录,用户离开时候删除该记录
如想统计在线人数,简单地执行
select count(*) from table... 即可
3.application对象中可以记住现在的人数,application的生命周期和服务器的生命周期一样长。
4.还有一种方法要用到一个文件global.jsa ,方法是(在JSP中)是sessionDestroy(),其中它是以session对象为参数的。还有要把global.jsa文件必须房子和JSP程序相同的文件目录内才行。
5.网页自动刷新的代码是:
在文件头部加上
<meta http-equiv="refresh" content="15">
刷新间隔时间是15秒
6.在session中加入监听类,类的示例代码如下:
onLineUser.java
import javax.servlet.http.*;
import javax.servlet.*;
import java.util.*;
public class onLineUser implements HttpSessionBindingListener {
public onLineUser(){
}
private Vector users=new Vector();
public int getCount(){
users.trimToSize();
return users.capacity();
}
public boolean existUser(String userName){
users.trimToSize();
boolean existUser=false;
for (int i=0;i<users.capacity();i++ )
{
if (userName.equals((String)users.get(i)))
{
existUser=true;
break;
}
}
return existUser;
}
public boolean deleteUser(String userName) {
users.trimToSize();
if(existUser(userName)){
int currUserIndex=-1;
for(int i=0;i<users.capacity();i++){
if(userName.equals((String)users.get(i))){
currUserIndex=i;
break;
}
}
if (currUserIndex!=-1){
users.remove(currUserIndex);
users.trimToSize();
return true;
}
}
return false;
}
public Vector getOnLineUser()
{
return users;
}
public void valueBound(HttpSessionBindingEvent e) {
users.trimToSize();
if(!existUser(e.getName())){
users.add(e.getName());
System.out.print(e.getName()+"\t 登入到系统\t"+(new Date()));
System.out.println(" 在线用户数为:"+getCount());
}else
System.out.println(e.getName()+"已经存在");
}
public void valueUnbound(HttpSessionBindingEvent e) {
users.trimToSize();
String userName=e.getName();
deleteUser(userName);
System.out.print(userName+"\t 退出系统\t"+(new Date()));
System.out.println(" 在线用户数为:"+getCount());
}
}
jsp:
<%@ page contentType="text/html;charset=gb2312" %>
<%@ page import="java.util.*" %>
<jsp:useBean id="onlineuser" class="temp.jb.onLineUser" scope="application"/>
<html>
<head>
</head>
<body onUnload="postMessage()">
<center>
<p><h1>登陆成功,欢迎访问</h1></p>
</center>
<% session = request.getSession(false); %>
<%
String username=request.getParameter("username");
if (onlineuser.existUser(username)){
out.println("用户<font color=red>"+username+"</font>已经登陆!");
}else{
session.setMaxInactiveInterval(50); //Sesion有效时长,以秒为单位
session.setAttribute(username,onlineuser);
out.println("欢迎新用户:<font color=red>"+username+"</font>登陆到系统!");
}
out.println("<br>当前在线用户人数:<font color=red>"+onlineuser.getCount()+"</font><br>");
String ip = request.getRemoteAddr();
out.println("<br>IP:<font color=red>"+ip+"</font><br>");
Vector vt=onlineuser.getOnLineUser();
Enumeration e = vt.elements();
out.println("在线用户列表");
out.println("<table border=1>");
out.println("<tr><td>用户名</td></tr>");
while(e.hasMoreElements()){
out.println("<tr><td>");
out.println((String)e.nextElement()+"<br>");
out.println("</td></tr>");
}
out.println("</table>");
%>
<center>
<p> </p>
[<a href="javascript:window.close()">关闭窗口</a>]
<%
out.println("<p><a href='logout.jsp?username="+username+"'>退出系统</a></p>");
%>
</center>
<Script>
function postMessage(){
<%onlineuser.deleteUser(request.getParameter("username"));%>
}
</Script>
</body>
</html>
Ⅵ C#中统计在线人数的web程序
在Global.asax全局应用程序类中,设置当应用程序启动时初始化计数器,代码如下。
void Application_Start(object sender, EventArgs e)
{
// 在应用程序启动时运行的代码
//初始化
Application["counter"] = 0;
}
在新会话启动时,实现计数器加1,代码如下。
void Session_Start(object sender, EventArgs e)
{
// 在新会话启动时运行的代码
//对Application加锁以防并行性
Application.Lock();
//增加一个在线人数
Application["counter"] = (int)Application["counter"] + 1;
//解锁
Application.UnLock();
}
在会话结束时,实现计数器减1,代码如下。
void Session_End(object sender, EventArgs e)
{
// 在会话结束时运行的代码。
// 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
// InProc 时,才会引发 Session_End 事件。如果会话模式设置为 StateServer
// 或 SQLServer,则不会引发该事件。
//对Application加锁以防并行性
Application.Lock();
//减少一个在线人数
Application["counter"] = (int)Application["counter"] - 1;
//解锁
Application.UnLock();
}
在主页Default.aspx第一次加载时,将Application[“counter”]赋给Label.text,实现在界面上显示在线人数,其代码如下。
Label2.Text=Application["counter"].ToString ();