2011-12-29 4 views
1

私は電子商取引のWebサイトで作業しています。ユーザーが特定のセッションでアクセスしたページの数を監視します。サイトの登録ユーザーのみが存在します。このように追加特定のユーザーが特定のセッションでアクセスしたページの数を知る方法

$_SESSION['history'][] = $_SERVER['REQUEST_URI']; 

: は、いずれかは、私はあなたが単純に実行できるアプリケーション内のいくつかの時点で、PHPとMySQL

+0

のようにLINQを介して挿入...その後、SQLまたはLINQクエリを使用してデータベースでこれらの値を挿入し、この方法のように

 string pageName = Path.GetFileName(Request.PhysicalPath); string serverName = HttpContext.Current.Server.MachineName; string sessionId = HttpContext.Current.Session.SessionID; string ipAddress = HttpContext.Current.Request.UserHostAddress; 

をやりましたセッション変数を作成することができます。 '$ _SESSION ['pages']'そしてすべてのページに1を加えますか?その後、ユーザーが積極的にログアウトするかセッションが終了すると、そのユーザーのセッションIDと訪問したページ数でデータベースを更新します。 – martincarlin87

+0

ページビューごとにINSERTを実行するのではなく、独自のセッション処理を実装してセッションをデータベースに格納することができます。このようにすると、セッションが削除されたときにページビューテーブルを1回更新するだけで済みます。 – djot

答えて

1

を使用しています 、特定のセッションのユーザーのURLを記録する方法を教えてください現在のURIをセッションのhistory配列に返します。 URIがすでに存在するかどうかをチェックしたり、レポートの目的でページ間の時間差を計算したりするなど、より直感的な方法があります。

1

これを行う方法は複数あります。ここでは簡単なウォークスルーがあります:

  1. 2つのフィールド( 'session_id'、 'url')を持つテーブルを作成します。

  2. サイトがロードされるたびに、session_id()を使用してsessionidを読み取り、この値を使用して、ページのURLを人が訪れるすべてのページのテーブルに格納します。

  3. ページが読み込まれたら、$_SERVER['REQUEST_URI'];でURLを読み取り、session_id()の値を使用してレコードを保存します。

この簡単な手法を実装した後。あなたは

はP.S.

SELECT count(*) FROM <YOURSESSIONTABLE> GROUP BY `<session_id_field>` 
単純なクエリを使用して、ページを参照してくださいどのように多くの人々見ることができますこれは基本的な例の一つであり、

+0

助けてくれてありがとう –

0

は、MySQLのテーブル

UserID SessionID  URI 
1   XYZ   /
1   XYZ   /contact 
1   ZYX   /contact 

$query = "INSERT IGNORE INTO visits (`UserID`, `SessionID`, `Uri`) 
    VALUES ($userID, " . session_id() . ", " . mysql_real_escape_string(['REQUEST_URI']) . ")"; 

後で表にあなたをこの挿入ロード各ページをお持ちの要件に合わせて変更する必要がありますユーザーのセッションを確認して、異なるページをすべてカウントアップできます。

SELECT COUNT(URI) FROM visits WHERE UserID = $userID GROUP BY SessionID 

あなたも、私は

public class BasePage : System.Web.UI.Page 
{ 
    protected virtual void Page_Load(object sender, EventArgs e) 
    { 
    } 
} 

ノートのようなSystem.Web.UI.Pageによって継承される基本クラスを作っ

0

セッションと日時を関連付けることができます。make基本クラスのページのロードイベント仮想およびその他のページページロードイベントオーバーライドして、

base.Page_Load(sender, e); 

などのすべてのページのページのロードイベントで呼び出し、基本クラスのページのロードイベントは、すべてのページは

のように、この基本クラスを介して継承されます
protected override void Page_Load(object sender, EventArgs e) 
    { 
     base.Page_Load(sender, e); 
    } 

私は私はあなたが

VisitorInformation vPanel = new VisitorInformation() 
     { 
      PageName = Path.GetFileName(HttpContext.Current.Request.PhysicalPath), 
      ServerName = HttpContext.Current.Server.MachineName, 
      SessionId = HttpContext.Current.Session.SessionID, 
      IPAddress = HttpContext.Current.Request.UserHostAddress, 
      VisitorDate = Convert.ToDateTime(System.DateTime.Now.ToString()), 
     }; 
     new BaseDAL().AddVisitorInfo(vPanel); 
関連する問題