• 締切済み

セッション管理

file1.html内でアップロードされた画像をabc.phpに送り、 そのabc.php内でfile1.htmlでアップロードされた画像の編集処理を行う プログラムを組みました。 編集処理には1分かかります。 ユーザAの画像を編集処理中の 編集処理時間1分間の間にユーザB、ユーザCがfile1.htmlでファイルをアップロードしabc.phpに処理を求めてきた時、 ユーザB、ユーザCのブラウザに対し 「あなたは1人目の処理待ちユーザです」 「あなたは2人目の処理待ちユーザです」 といったような順番待ち表示をセッション管理を応用して表示させたいです 。 下のセッション管理プログラムを応用して順番待ち表示を行なう事はできないでしょうか? 編集処理のプログラムは組めています。 <?php session_start(); if (!isset($_SESSION["visited"])){ print('0'); $_SESSION["visited"] = 1; $_SESSION["date"] = date('c'); }else{ $visited = $_SESSION["visited"]; $visited++; print($_SESSION["visited"]); $_SESSION["visited"] = $visited; $_SESSION["date"] = date('c'); } ?>

  • PHP
  • 回答数1
  • ありがとう数2

みんなの回答

  • inu2
  • ベストアンサー率33% (1229/3720)
回答No.1

順番待ちがカウントアップされてゆきますので、ブラウザをリロードすればするほど順番待ちが増えていきますよ あなたのプログラムだと_SESSIONに保存された$_SESSION["visited"]が何人目かを知ることになりますよね あなたのロジックだとそのサイトにアクセスした人全員に 「あなたは1人目の処理待ちユーザです」 って表示されてしまします しかもリロードすればするほど 2人目、3人目・・・ と増えてゆき、いつまでたってもDLできません _SESSIONは多人数単位でのセッションではなく、個人ごとのセッションです こういった処理の場合は、DBを使ってタスクマネージメントをしなくてはなりません アクセスしてきた順に順番リストをためてゆき、cronやら、DBのイベントスケジューラー やトリガを利用して処理していくことになります

関連するQ&A

  • セッションについて

    現在phpとMysqlで認証後、認証時に入力したID名のディレクトリを自動で作るシステムを作っています。 しかし、ID名のディレクトリにファイルをアップロードしたいのですが、なぜか指定よりひとつ上の階層にファイルが保存されてしまいます。 考えられることを以下に記します。 1、セッションがうまく渡ってきておらず、指定先のセッション変数が空である。 2、関数の使い方が間違っている。 この他に理由があるのかもしれません。 アップロード指定ディレクトリは以下のように指定しています。 $username = $_POST['user']; $_SESSION['username'] = $_POST['user']; $file_dir = "c:/xampp/htdocs/report/$username"; ちなみに認証時のID名のディレクトリを作るプログラムは以下の通りです。 <?php session_start(); $dirname = $_POST['user']; $_SESSION['dirname'] = $_POST['user']; $path = "c:/xampp/htdocs/report/$dirname"; if(!file_exists($path)){mkdir($path);} ?> こちらもセッション変数を利用しているので同じようにしたら 大丈夫だと思っていたのですが・・・ お分かりになる方ご回答お願いいたします。

    • 締切済み
    • PHP
  • セッションが動かない

    セッションがちゃんと動かない。 PHPのセッションがちゃんと動きません。 他のプログラムを同じ環境で動かしたところうまく動きましたので、 コードのほうに問題があると思います。 以下のようなコードを書いています <?php require_once '../function.php'; require_once '../config.php'; if (!($_SESSION['date'])) { session_start(); } connect_db() ?> <div id="comu_confirm"> <?php $now = new DateTime(); $date = $now->format('Y/m/d H:i:s'); $title = $_POST['title']; $contents = $_POST['contents']; if ($_SESSION['date']) { $_SESSION = array(); session_destroy(); }elseif($_POST) { } //test $_SESSION['title'] = $title; $_SESSION['contents'] = $contents; $_SESSION['date'] = $date; まず最初はelseifのほうのプログラムを動かして、session変数に値を入れます。 その後、もう一度このファイルに飛んで、二回目はsession変数が入っているので ifのほうに入って、ifの中の処理をするという形にしたかったのですがif文のほうの処理に行きません。 ちなみに、二回目に見たときはURLの欄にセッションIDは表示されていませんでした。 テストとして <?php require_once '../function.php'; require_once '../config.php'; if (!($_SESSION['date'])) { session_start(); } connect_db() ?> <div id="comu_confirm"> <?php $now = new DateTime(); $date = $now->format('Y/m/d H:i:s'); $title = $_POST['title']; $contents = $_POST['contents']; //test $_SESSION['title'] = $title; $_SESSION['contents'] = $contents; $_SESSION['date'] = $date; if ($_SESSION['date']) { $_SESSION = array(); session_destroy(); }elseif($_POST) { } としてみたところ、if文の処理は動いていました。 なにが悪いのでしょうか? 不足した情報がありましたら開示したいと思いますので教えていただければと思います。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • phpのセッションについて

    XAMPPのローカル環境でphpのプログラムを組んだのですが、いざ実際のサーバーにアップロード してもうまく動きませんん。 調べた結果セッションがちゃんと動いていないという結論に達しました。 単純なセッションなのですが、ローカル環境ですとちゃんと動くのが、サーバーにアップすると $_SESSION['sa']が空っぽの状態となります。 サーバーにアップロードしたindex.phpの中にecho $_SESSION['sa'];と書き込むと 「あいうえお」とちゃんと表示されますのでセッションには格納されているようなのですが 値をきちんとセッションで持ち越せないようです・・。 ローカルでは下記のファイルはちゃんと持ち越せていて、実際のサーバーではダメな理由がまったくわかりません。 何か特別な設定が必要なのでしょうか?何時間もググっていますがそういった設定が必要と いう記述は見当たらないのですが・・。 サーバーはさくらサーバーでバージョンはPHP 5.4.22となっています。 ------------------------------------------------------------ ファイル名 index.php <?php session_start(); $data="あいうえお" $_SESSION['sa']=$data; ?> <a href="aaa.php">aaa.phpへのリンク</a> ------------------------------------------------ ファイル名aaa.php ------------------------------------------------ <?php session_start(); $sss = $_SESSION['sa']; echo $sss ; ?> ------------------------------------------------

    • ベストアンサー
    • PHP
  • PHPのセッション変数について

    ページの構成が代わり、A-B-Cと順番だったのをA-Cと変更しました。 AからCリンクにとぶように設定したのですが、リンクを変更していてもBのページに行ってしまいます。 このプログラムを作った人に聞きましたところ、 if{session("user_sbt") というセッション変数で、新しく作られた画面のところで何もセットしていなければ初めの画面(B)に戻るというプログラムが走っているそうです。作った人に直してもらえたら良いのですが、事情で日本にはいないので、わかる方教えてください。よろしくお願いします。 PHPファイルの上部には session_start(); require_once("../_common/head.php"); require_once("../_common/mysql.php"); というセッション変数が記入されています。

    • 締切済み
    • PHP
  • セッションについての設定なのですが・・。

    すいません。今さくらのレンタルサーバーでphpをアップロードしたのですが、 セッションがまったく動きません。 XAMPPのローカル環境では動いていますのでプログラムには間違いは無いのですが、 私はphpプログラムを組むのも初めてなもので原因をググっていました。 するとあるウェブサイトにさくらのレンタルサーバーで同様の症状に陥ったとのブログが ありまして、さくらはsession.save_pathを明示的に指定しなければセッションが使えないとの 内容でした。 ( <?phpinfo()?>で設定状況を調べました所session.save_pathはno valueでした) 恐らく自分と同じ症状なのでパスを指定すれば解決すると思うのですが、 さくらのphp.iniはロリポップやエックスサーバーとは違いラジオボタンやチェックボックスでの php.ini設定は一切できず、何も記載されていないテキストボックスがあるだけです。 私は今までローカル環境でしかphpをさわった事がないためphp.iniの設定の仕方が全く わかりません。 どなたかsession.save_pathを指定する方法教えてもらえませんか? (下の例を見てもよくわかりません。何かファイルを作ってアップロードするのでしょうか??) サイトにあった解決方法 ---------------------------------------------------------------------------------- php.iniにてsession.save_pathを明示的に指定(例:/home/user/tmp) ← 以前はno valueだった 指定したディレクトリに書き込み権限を与える

    • ベストアンサー
    • PHP
  • セッションを利用したファイルの受け渡し

    セッションを利用してデータベースにデータを登録するプログラムを作成しており、 画像のアップロード部分の処理で困っております。 画像がある場合は画像URLを登録、ない場合は空にしたいのですが、 下記のソースの問題点や解決策がお分かりになる方、ぜひご教示ください。 ■submit.php ・ ・ if(empty($error)){ if(isset($_FILES)){ $image = date('YmdHis') . $_FILES['image']['name']; move_uploaded_file($_FILES['image']['tmp_name'], 'picture/' . $image); //パターン1 $_SESSION['image'] = $image; } //パターン2 $_SESSION['image'] = $image; header('Location: check.php'); } ・ ・ <input type="file" id="image" name="image" /> <input type="submit" value="確認する" /> ・ ・ ■check.php if(isset($_SESSION['image'])){ echo '<img src="picture/' . $_SESSION['image'] . '" />'; } else { echo '写真のアップロードはありません。'; } ・ ・ <input type="submit" value="登録する" /> パターン1の場合 画像があっても無くても、「写真のアップロードはありません。」となりデータベースへの登録も空となります。 パターン2の場合 画像がある場合は、正常に「date('YmdHis')[imageの名前].jpg」が表示されデータベースに登録できます。 画像がない場合、check.php上では、<img src="picture/[date('YmdHis')の部分]のみ" />で表示され、date('YmdHis')の文字列がデータベースに登録されてしまいます。

    • ベストアンサー
    • 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
  • COOKIEを用いたセッション管理について

    input.phpでsetcookieを使ってcokkieを設定します。 有効期限は1時間です。 check.php→thanks.phpという流れで登録を行い、thanks.phpでcookieを破棄します。 リロードを行ったときにCOOKIEがないのでエラー処理が行われます。 check.phpに直接アクセスしたときもcookieがない場合はエラー処理を行います。 ここまではいいのですが、input.phpにアクセスしたときにthanks.phpで破棄したcookieがまだ生きているのです。 ここで新たにcookieを発行して新しいsessionを開始したいのですが、うまくいきません。 どのようにしたらいいのでしょうか? 1時間たたないうちにユーザが登録をしようとするとcookieの情報を元に更新されてしまいます。

    • ベストアンサー
    • PHP
  • ファイルアップロードしたものをセッションに保存

    $_FILESでアップロードされた画像ファイルをセッションに保存し、 確認画面で確定されるとファイルとして保存するという処理を 作成したいのですが、 どのようにすればいいのでしょうか? ファイルサイズは20MBくらいです。

    • 締切済み
    • PHP
  • Ajaxでのセッション管理は、どのようにできますか?

    PHP,Ajaxともに初心者に毛が生えた程度のスキルですが、ちょっとした会員サイトを作っています。 ------------ 実現したいこと ------------ ログイン後、自分専用のブログのようなページで、適当にコメントを入力する。 コメント欄からカーソルが抜けた際に、「ユーザーID、日付、コメント内容」を AjaxのXMLHttpRequest で送信し該当ユーザーのDBに書き込む。 ------------ 困ったこと ------------ サーバサイド(PHP側)で、「ユーザーID、日付、コメント内容」を受信するまでは、できた。 後は、$_GETの値をDBに登録するのだが、受け取ったXMLHttpRequestのセッションが判らず、どのユーザーのDBに登録するかの判断ができません。 たとえば、下記のようにの内容を XMLHttpRequest でGET送信するのだが、これだと、誰でも更新できてしまいます。 http://www.dummy.jp/?userid=100&date=2006-05-17&comment=urlencode-shita-moji ログインした際に保持したセッションの持ち主=XMLHttpRequestのセッションを紐付けたいのですが、どのようにすれば、解決できるでしょうか? XMLHttpRequestで送信するGETデータに、セッションIDも書けば、紐付けはできるのですが、セキュリティの問題もあり、書いていません。 いい方法を教えてください。

    • 締切済み
    • PHP

専門家に質問してみよう