• 締切済み

Perlでのセッション管理と不要セッション削除について

いつもお世話になっています。 Perlにてセッション管理(ログインして、サイト内はユーザーIDなどを持ちまわるような)を行おうとしています。 CGI::Sessionを使用して実現できると思っているのですが、 疑問があります。 セッション情報の持ち方は、サーバー内にファイルか、DBに格納する ことになると思いますが、不要になったファイルやレコードは、 みなさんどうされているのでしょうか? (ログアウトボタンがあっても、ブラウザの閉じるボタンを押される ケースが多いと思いますので、必ずdelete()はできないですよね?) 削除バッチなどで定期的に削除することを考えていますが、 もっとスマートなやり方があればご教示いただければと思います。 よろしくおねがいします。

  • Perl
  • 回答数1
  • ありがとう数5

みんなの回答

  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.1

 バッチ(クロン)を使わず、期間限定のCookie(30分とか)を発行すると同時にデータベースを更新し、CGIが(誰からにこだわらず)起動されるたびに、データベース中の古いデータ(30分以上経過したもの)は削除してます。  クライアントA側cookieをa,サーバー側のAのデータをAとすると Aの認証  aの発行    Aの作成 Bの認証  bの発行    Bの作成と同時にAのチェック Aの利用  aの更新    Aの更新,Bのチェック Aの利用  aの更新    Aの更新,Bのチェック Aのlogout aの削除    Aの削除,Bのチェック B・・不明 Cの認証 cの発行    Cの作成,Bのチェック→削除  削除時に最終利用時間はIPアドレスやブラウザとともに一年程度データとして残しておく--利用トラブル発生時の対処のため。

関連するQ&A

  • セッション管理におけるクライアント同時接続制限について。

    皆さんこんにちは。セッション管理について教えて下さい。 Perlを使用し、cgiでWebのUIを作製中でして、CGI::Session.pmのモジュールで セッション管理を行っており、クライアントの同時接続数を1台に制限したいのですが、 うまくいかずに困っております。 クライアントからアクセスがあった場合に、最新のセッションを $session->expire 及び $session->empty で確認し、期限切れ、又は無効となっていたら新規セッションを発行している為、 クライアントがログアウトした場合は$session->deleteでサーバ内のセッションファイルを 削除できて問題はないのですが、ブラウザのxボタンで閉じてしまった場合、サーバ内の セッションファイルが削除されず、他のクライアントがログインできない状況になってしまいます。 セッションのデータはサーバ内のディレクトリに、セッションIDのみcookieで クライアントに保存という形態をとっております。 何か良い方法はないでしょうか?何卒ご教授のほど、お願い致します。 OS:FedraCore3 使用言語:Perl 5.8.6 Webサーバ:thttpd

  • ログアウトする際にセッションファイルを削除したい

    PHPでWEBアプリケーションを作成しています。 携帯対応にするために、フォームを使用できないところは セッションIDをURLに付加しています。 ログアウト後(ユーザーがログアウトボタンをクリック)は、戻るボタンをクリックしても「ログインしていません」のエラーメッセージが表示されるようにしたいのです。 現在、ログアウトする際、すべてのセッション変数を削除しているのですが、ブラウザの戻るボタンをクリックすると、もとの画面が表示されます。 その画面にはセッションIDを埋め込んだリンクがあり、 クリックすると正常にリンク先に移動してしまいます。 セッションファイルが残っているために、セッションが継続されたような状態になってしまっているのではないかと思います。 セッションファイルを削除すれば、上記エラーメッセージが表示されるのです。 そこで、ログアウト時にセッションファイルを自動的に削除してしまいたいのですが、どのような方法をとればよいのでしょうか? やっぱり普通にセッションファイルの場所を取得して、削除するしかないのでしょうか? 教えてください。 以下、ログアウト時の処理です。 // セッションの初期化 session_start(); // セッション変数を全て解除する $_SESSION = array(); (session_id('')); // セッションを切断するにはセッションクッキーも削除する。 // Note: セッション情報だけでなくセッションを破壊する。 if (isset($_COOKIE[session_name()])) {   setcookie(session_name(), '', time()-42000, '/'); } // 最終的に、セッションを破壊する session_unset(); session_destroy();

    • 締切済み
    • PHP
  • [PHP]セッション破棄について

    はじめまして。 phpを始めて1週間の初心者です。 現在、ホームページでログイン処理とログアウト処理をphpのセッションを使って作成しています。 今回質問させて頂くのはログアウト処理についてです。 ログアウト処理をでセッションを破棄する際に http://oshiete1.goo.ne.jp/qa3224862.html を参考にして下記の処理を行わせています。 -------------------- logout01.php -------------------- <?php session_start(); $_SESSION = array(); if(isset($_COOKIE[session_name()])){setcookie(session_name(),'',time()-4200,'/');} session_destroy(); header("location: http://~トップページのURL~/"); ?> -------------------- 確認をしたところ、ログインしたユーザの情報は削除されているようでした。 また、http://oshiete1.goo.ne.jp/qa3224862.htmlを参考に下記のようなログアウト処理も行わせてみました。 -------------------- logout02.php -------------------- <?php session_start(); unset($_SESSION['access']); header("location: http://~トップページのURL~/"); ?> -------------------- 同じく確認したところ、ログインしたユーザ情報は削除されているようでした。 -------------------- 環境 -------------------- <サーバ> 【OS】 windows XP(テスト環境)、CentOS 5.2(公開環境) 【PHP】 5.2.6 【Apache】 2.2 <クライアント> 【OS】 windows XP 【ブラウザ】 Firefox 3.0.8 IE 7 -------------------- -------------------- 質問 -------------------- (1)logout01.phpとlogout02.phpの違いは何でしょうか。 (2)「unset($_SESSION);」は使用すると「$_SESSION」が使えなくなるとのことですが、  それはphpを再インストールしない限りは使えなくなるということでしょうか。  それとも、ブラウザを再起動すれば使えるという意味でしょうか。 (3)「unset($_SESSION);」と「unset($_SESSION['access']);」では何が違うのでしょうか。 (3)セッションを使用するとサーバ側にセッションIDを保存したファイルが保存され、  クッキーがクライアント側に保存されるとのことですが、logout01.phpとlogout02.phpを  実行した場合、サーバ側のセッションIDを保存したファイルとクライアント側のクッキーを  保存したファイルは削除されているのでしょうか。 (4)セッションの有効期限を指定していないため、logout01.phpとlogout02.phpを実行せずに  ブラウザを終了させた時もログインしたユーザ情報は削除されているようでしたが、  この場合もサーバ側のセッションIDを保存したファイルとクライアント側のクッキーを  保存したファイルは削除されているのでしょうか。 初歩的な質問で申し訳御座いませんがよろしくお願いします。

    • ベストアンサー
    • PHP
  • Perl(cgi)ファイルからMySqlで管理しているデータベース制御に関して質問

    Perl(cgi)ファイルからテーブル内の一定の項目をDELETEしようとしています ランダムに選択させる値をハッシュに格納し読み込み、削除を試みています。 foreach $key (keys %hash) { # 取り出した値を$noに代入 $no = $hash{$key}; # SQL発行 $sql = $db->prepare("DELETE FROM テーブル名 WHERE レコード指定名='$no'"); # SQL実行 $sql->execute; } 上記の方法で問題なく実行できているのですが、ご覧のようにハッシュに格納されている数だけSPQを実行しているため効率が悪い、と 担当者から指摘をうけました。 PHPであればSPQの実行あと、for文で『 レコード指定名='_no'』の部分だけをループさせることができたのですが Perlではうまくいきません。ご教授ください。よろしくお願いします。 ちなみにPerlをはじめとしてプログラムそのものを勉強し始めて1ヶ月の初心者です。

    • ベストアンサー
    • MySQL
  • ASP セッション無効時でのDB操作方法

    過去の投稿で多重ログイン制御の延長で、ログイン制御をDBにて管理することになりました。 問題はログアウトせずにブラウザを落とされた場合ですが、とりあえずはセッションの有効時間が経過した場合にDBから削除する仕組みにしようかと思っています。 現在その仕組みをサイトなどで調査していますが、それにふさわしいサイトがみつからず、悩んでいます。 セッション落ちのイベントなどはどのようにして取得するのでしょうか。

  • Cookieを利用したユーザ管理

    perl(CGI::Session)を利用したセッション管理について教えてください。 【実現したい機能】 会員DB(IDやパスワードを保持)を使用し、認証を行い、 認証成功したらCookieを発行し、会員別のページを表示する。 会員DBのIDとCookieを紐づける機能は、CGI::Sessionにあるのでしょうか。 CGI側でCookieから会員DBのIDを結びつけるためには新たにファイルなどを作成する必要があるのでしょうか。

    • ベストアンサー
    • Perl
  • セッションがうまくできません

    #!c:/Perl/bin/Perl.exe ------セッションを作成する------- use CGI::Session; $session = new CGI::Session(undef,undef,{Directory=>'/tmp'}); $session->expire('+50s'); $session->param("membername","テスト"); $session->flush(); print "Location: ./test.pl\n\n"; ------セッションを読み込む------- #!c:/Perl/bin/Perl.exe print"Content-type: text/html\n\n"; use CGI; use CGI::Session; $q = new CGI(); $session = CGI::Session->new(undef,$q,{Directory=>'/tmp'}); $params = $session->param_hashref(); print$params->{"message"}; $session->flush(); 何もブラウザに表示がされません、どこが間違ってるのでしょうか?

  • セッション

    セッションとクッキーで質問です。 1.session_id()やsession_name()っていつ使うのでしょうか? ブラウザは特定できても個人を特定できるわけではないですよね?それとも ブラウザを特定して管理するためなのでしょうか? 2.自動グイン機能を実装しようと思うとき、 クッキーとサーバー側(正確にはdb)にランダムな文字列を格納し、次回サイトを訪れた際、保存している値とクッキーにある値を照合し合えばログインしたことにする。 上記のようなロジックで大丈夫でしょうか?

    • ベストアンサー
    • PHP
  • セッションに関して

    こんばんは。お世話になっております。 現在、LocalにてDBを連動させたウェブアプリを開発しているのですが、レンタルサーバーにアップさせた際、今まで問題が無かったところに障害が発生してしまいました。 と申しますのも、DBにてIDおよびパスワードを参照してログインする、といった機能を有しており、ログインした際、DBに登録のあるIDなどを$_SESSION[""]= と、セッションに格納してIDを持ち歩いているのですが、他の会員(ここでいうマイページ)のページを覗くと、セッションに格納されたIDが、訪問した会員のIDと入れ替わってしまうのです。 入れ替わってしまうようなコードが存在しているのか?と、確認してはいるものの、そのようなものは見つかりません。 そもそもDBに参照した際、そのDBにあるデータを$_SESSION[""]に代入するだけのコードとなっているのですが、この時点で間違っているのか、単に入れ替わってしまうコードを見落としているだけなのか、を客観的にお聞かせ願えればと思い、投函させていただきました。 お知恵を頂くには言葉足らずなところもありますが、アドバイスのほどいただければ幸いに思っております。宜しくお願い致します。

    • ベストアンサー
    • PHP
  • セッション削除でエラー

    $session->delete(); でセッションファイルをディスクから削除使用とすると、Can't call method "delete" on an undefined value at test.pl line 471. というエラーが出てきてしまいます。 なぜでしょうか。

    • ベストアンサー
    • Perl

専門家に質問してみよう