質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

解決済

1回答

1334閲覧

php SESSIONの扱いについて

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

1グッド

0クリップ

投稿2016/12/01 04:12

編集2016/12/01 19:17

新着情報のCMSを作ってます
DBに登録された内容をいったんSESSION配列に代入して編集内容に合わせSESSIONを書き直して最終的にupdateしようと考えています。
一つの記事に複数の(レイアウトを選択できるように)ブロックを設けられるように考えました。

SESSIONの内容

["articles"]=>array(8) { ["id"]=>string(1) "7" ["date"]=>string(10) "2016-12-01" ["switch"]=>int(1) ["title"]=>string(30) "title" ["image_num"]=>int(1) ["type"]=>int(2) ["timestamp"]=>string(19) "2016-12-01 09:11:31" ["blocks"]=>array(2) [0]=>array(7) ["block_id"]=>int(9) ["text"]=>string(21) "データベースに登録済みのブロック" ["layout_type"]=>int(1) ["files"]=>array(1) [0]=>array(5) ["file_id"]=>int(12) ["file_block_id"]=>int(9) ["file_name"]=> string(16) "infoimage9-1.jpg" ["file_type"]=>int(0) ["position"]=>int(1) //-------------------------以下編集でSESSIONに追加した分----------------------------------- [1]=> array(5) { ["new"]=>string(4) "true" ["block_id"]=>string(4) "new1" ["text"]=>"新しくSESSIONに追加されたブロック" ["layout_type"]=>int(3) ["files"]=>array(1) { [0]=>array(5) { ["file_id"]=>NULL ["file_block_id"]=>string(4) "new1" ["file_name"]=>NULL ["file_type"]=>int(0) ["position"]=>int(1)

「ブロック追加行程」
追加ボタンクリック→レイアウト選択→ajaxで外部phpにアクセスしてSESSIONに追加→ページをリロード
「ブロックリセット行程」
リセットボタンクリック→ajaxで外部phpにアクセスして$_SESSION['articles']をunset→ページをリロード
と言う流れです。

※リロードした際、$_SESSION['articles']を持っていなければDBの内容をSESSIONに代入
持っていればその内容に沿ってHTMLをはきだす仕組みにしてあります。
[リセットの例]

javascript

1$("#reset").click(function () { 2 $.ajax({ 3 url: edit_reset_path, 4 type: 'post', 5 data: { 6 "token": SecurityId, 7 }, 8 timeout: 10000, 9 10 beforeSend: function(xhr, settings) { 11 $(this).attr('disabled', true); 12 }, 13 complete: function(xhr, textStatus) { 14 // ボタンを有効化し、再送信を許可 15 $(this).attr('disabled', false); 16 }, 17 success: function(response) { 18 if(response != 'error'){ 19 location.reload(); 20 }else{ 21 //割愛 22 } 23 }, 24 // 通信失敗時の処理 25 error: function() { 26 //割愛 27 } 28 }); 29}); 30

php

1 try { 2 if(!SecurityCheck(h($_POST['token']))){ 3 $response = 'error'; 4 throw new PDOException(); 5 } 6 $_SESSION['articles'] = array(); 7 unset($_SESSION['articles']); 8 //cookieの削除もしましたが結果かわりません。 9 10 } catch (PDOException $e) { 11 exit($response.$e->getMessage()); 12 } 13

色々割愛してますけど基本的にはこんな感じです。

「問題点」
ローカルでテストした段階ではサクサクに動いてくれたんですが WEBサーバーに設置してみると一回の操作で機能が反映されない事が頻繁にあり不安定です。(特にリセットが)

反映されていない状態でブラウザのリフレッシュを行うと想定通りの表示になります。IE・chromeで確認
リロードのタイミングが早いの?思って。
php・javascript双方で遅延(最大20秒程)させてみましたが結果は同じでした。

これは何が原因なんでしょうか?

対策のご指南をお願いいたします...m(_ _)m

/追記です !
-----------------------------------------
/
フレームワークにsmarty使ってます!
cashはfalseにしてあります。

/更に追記です
----------------------------------------
/
..やはり解決できていませんでした。
どうしても時々SESSIONが残ったままになってて..次のことを試してみました

削除するphp「try内部」

php

1 while(true){// 完全に消すまでこれでもか!と繰り返す 2 $_SESSION['articles'] = array(); 3 unset($_SESSION['articles']); 4 5 if(!isset($_SESSION['articles'])){ //無くなってたら勘弁してあげる 6 $response = count($_SESSION['articles']);//『0』を確認するためレスポンスしてみる 7 throw new PDOException(); 8 break; 9 } 10 }

送り側Ajax

javascript

1 $.ajax({ 2 url: 割愛, 3 type: 'post', 4 data: { 5 "token": SecurityId 6 }, 7 timeout: 10000, 8 9 beforeSend: function(xhr, settings) { 10 $(this).attr('disabled', true); 11 }, 12 complete: function(xhr, textStatus) { 13 $(this).attr('disabled', false); 14 }, 15 success: function(response) { 16 alert(response); //SESSIONが残る時はココ..無視されます 17 if(response == 'error'){ 18 //割愛 19 }else if(response > 0){ 20 $.ajax(this); //0以外の返事が来たらやり直させる 21 } 22 }, 23 error: function() { 24 //割愛 25 }); 26 window.location.href = master_dir+'/poooo/?'+SecurityId+'&data='+Data_Parameter

結果 不具合の時は レスポンスのアラートも無反応....飛ばされてしまいます。

いったい何が起きているんでしょうか?

KiyoshiMotoki👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ローカルで問題なく、サーバ上での動作で問題があるのであれば、キャッシュの問題ではないでしょうか。
location.reload()ではなく、

JavaScript

1location.href = window.location.href+'?'+(+new Date());

などして、キャッシュを読まれないようにしてはいかがでしょうか。
※このコードそのままだと、常にURLのお尻に[?1480566812422?1480566812423]とか付いてくるので、parameter処理してくださいね。

投稿2016/12/01 04:35

kunai

総合スコア5405

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/12/01 04:36

ありがとうございます!試してみます!
退会済みユーザー

退会済みユーザー

2016/12/01 04:49

ありがとうござました やはりキャッシュだったみたいです..! 確かにそのままだとアドレスバーがすごいことになりますね...(*^_^*) 何とか工夫してみます ありがとうございました..♪
退会済みユーザー

退会済みユーザー

2016/12/01 18:57

kunaiさま やはり 抜本的には解決できていませんでした。 キャッシュ回避にkunaiさまのご提案は有効かと思いますが、 原因はキャッシュではなかったようです。 一旦、ベストアンサーを外して「未解決」に戻します。 ホントすみません!
退会済みユーザー

退会済みユーザー

2016/12/02 10:51

いまだ原因は不明ですが Jqueryの挙動が不安定と判断しまして.. 外部jsファイルをやめて インラインで記述する事で安定できました。 お騒がせして申し訳りませんでしたm(_ _)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問