私は uni プロジェクト用の php ベースのサイトを開発しています。
すべてが機能しており、ログインしているユーザーのデータを保存するためにセッションを使用しています。
jqueryを使用して、ユーザーが画像にタグを付けることができるページがあります。jquery は php を使用して、タグを含む txt ファイルを保存します。そのphpページに「session_start();」を追加しました 上部にあるので、mysql db にも情報を保存できます。
しかし、画像にタグを付けると、実際にはセッションが再起動されているため、ユーザーはログアウトされており、データベースには何も保存されていないことがわかりました。
私が間違っている可能性のあるアイデアはありますか?(私のプロジェクトの他のすべてのページで動作していますが、この javascript + php コンボだけが問題を引き起こしているようです)。
これは、javascript によって呼び出される php ページのコードです。これはサードパーティの jquery プラグインからのもので、独自のコードを追加しました。
session_start();
include 'notes.class.php';
require_once '../db.php';
if (isset($_POST['image']) && !empty($_POST['image']))
$oNote = new note('../jquery-notes_notes/', '', (string) strip_tags($_POST['image']), '.note');
$NoteName = md5(strip_tags($_POST['image']));
$NoteName .= '.note';
$ImageID = $_SESSION['CurrentImage'];
//get the name of the last poster if the user is logged in, its the username, otherwise its the comment name
if ($_SESSION['logged_in'] == 1) {
$LastNoteBy = $_SESSION['username'];
} else {
$LastNoteBy = 'Guest: '.$_SESSION['commentname'];
}
//get relevant info for this image
$DBQueryImageData = mysqli_query($dblink, "SELECT * FROM images WHERE image_id = '$ImageID'");
while($row = mysqli_fetch_array($DBQueryImageData)) {
$DBImageUserID = $row['user_id'];
$DBImageName = $row['image_name'];
$DBGivenName = $row['given_name'];
$DBImageLasteNoteBy = $row['last_note_by'];
$DBImageProjectID = $row['project_id'];
}
//get the project name of the related project
$DBQueryProjectName = mysqli_query($dblink, "SELECT * FROM projects WHERE project_id = '$DBImageProjectID'");
while($row = mysqli_fetch_array($DBQueryProjectName)) {
$DBProjectName = $row['project_name'];
}
//get the username of the owner of the previously obtained user_id
$DBQueryUsername = mysqli_query($dblink, "SELECT * FROM users WHERE user_id = '$DBImageUserID'");
while($row = mysqli_fetch_array($DBQueryUsername)) {
$DBUsername = $row['username'];
$DBEmail = $row['email'];
$DBNotify = $row['notify'];
}
//only send off the email if the user has asked to receive notifications
if ($DBNotify == 1) {
//compare the current poster to the last poster saved for this image, if they are different, and if the current poster is not the owner, email the owner of the project
//if the last poster is not the same as the current poster
if ($DBImageLasteNoteBy != $LastNoteBy) {
//if the current poster is not the owner
if ($LastNoteBy != $DBUsername) {
if (strlen($DBGivenName) > 4) {
$DBImageName = $DBGivenName;
}
//send the email
$to = $DBEmail;
$subject = "New comment on your project image";
$headers = 'From: test@test.com' . "\r\n" .
'Reply-To: test@test.com' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
$additionalParameters = '-ODeliveryMode=d';
$body = 'Hi '.$DBUsername.','."\n\n".'A comment has been made by '.$LastNoteBy.' on your image: '.$DBImageName.' in your project: '.$DBProjectName."\n\n".
'http://'.$_SERVER['SERVER_NAME'].'/saeproj/index.php?page=project&id='.$DBImageProjectID;
mail($to, $subject, $body, $headers, $additionalParameters);
}
}
}
mysqli_query($dblink, "UPDATE images SET note = '$NoteName', last_note_by = '$LastNoteBy' WHERE image_id = '$ImageID'") or die(mysql_error());
更新: iMac で実行されている MAMP バージョンでログアウトされていないことに気付きました。しかし、ホストされている Web スペースでログアウトされています (ipower がホストです)。
更新 2:確認したところ、セッション ID は変更されていませんが、セッション ['logged-in'] が 0 に変更されています。セッション ID が変更されていない場合、セッションは再開されていません。正しいですか?