Ⅰ 如何統計某個頁面的在線人數
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 ();