簡體   English   中英

單擊提交按鈕時,PHP 會話結束

[英]PHP session ends when submit button is clicked

我想為用戶制作個人資料上傳圖片,以便他們可以在他們的個人資料中上傳自己的頭像......所以這里的問題是每當我點擊上傳按鈕會話被破壞。

這是表格:

if(isset($_SESSION['profileimgID'])){
echo "<form action='upload.php' method='POST' enctype='multipart/form-data'>
<input type='file' name='file'>             
<button type='submit' name='uploadimgsubmt' class='button1'>upload</button></form>";
}
?>

upload.php 文件的部分代碼:

<?php
session_start();
include_once 'includes/dbh.inc.php';

$id = $_SESSION['profileimgID'];
if(isset($_POST['uploadimgsubmt'])){

**code code code**

if($fileError === 0){
if($filesize < 1000000){
$fileNameNew = "profile".$id.".".$fileActualExt;
$fileDestination = 'uploads/'.$fileNameNew;
move_uploaded_file($filetmpname, $fileDestination);
$sql = "UPDATE profileimg SET STATUS=0 WHERE userid='$id';";
$result = mysqli_query($conn, $sql);    
header("Location: index.php?upload=success");
}
}

**code code code**

如果用戶成功登錄,則在 loginCheck.php 中的代碼:

session_start();
$_SESSION['userID'] = $row['idusers'];
$_SESSION['username'] = $row['uidusers'];                         
$cmpor = $row['idusers'];
$sql = "SELECT * FROM profileimg WHERE id";
$result = mysqli_query($conn, $sql);
while($row = mysqli_fetch_assoc($result)){
if($row['id'] == $cmpor){   
$_SESSION['profileimgID'] = $row['id'];
}
}
header("Location: ../index.php?login=success");
exit();
}

與問題相關的最后一段代碼位於 index.php:

<?php
session_start();
include_once 'includes/dbh.inc.php';
?>
**code code**
<?php
if(isset($_SESSION['profileimgID'])){
echo 'Show this content';
}else{
echo 'Show this content';
}
?>
**code code**

如果我將 'profileimgID' 刪除為空(''),一切正常,但 isset 方法不會隱藏顯示內容。 如果我保留它,因為它的 isset 方法工作正常,但上傳按鈕會破壞會話並且用戶已注銷。

如果用戶成功登錄,print_r($_SESSION) 會同時生成 index.php 和 upload.php:對於用戶 #2

Array ( [userID] => 2 [username] => popa [profileimgID] => 2 ) 

我檢查了控制台的請求,當我單擊上傳按鈕時,我收到以下消息:

Form contains a file input, 
but is missing method=POST and 
enctype=multipart/form-data on the form. 
The file will not be sent.

這部分 (isset($_SESSION['profileimgID'])) 以某種方式干擾了這個過程。 當我刪除它時,會話被維護並且它可以正常工作,上傳也可以工作。

更新:這是我點擊上傳按鈕時得到的: https : //i.stack.imgur.com/So7OD.png

這是我猜對的嗎?: https : //i.stack.imgur.com/HcBqz.png

我是 php 新手,所以...抱歉我的錯誤。

您現在如何維護會話標識符? “會話”依賴於每次交換時從客戶端以某種方式發送到主機的“會話 ID”:通常,這是使用 cookie 完成的,但可以使用GET參數完成(例如&sessionid=XXXX )聽起來對我來說,這個信息沒有被發送:會話實際上並沒有被“破壞”,但你找不到它。

解決此問題的最快方法可能是使用瀏覽器的網絡調試功能:查看正在發送的完整數據包,包括 HTML 標頭(即 cookie 所在的位置)。 首先,看看“正常”的交流。 然后,查看單擊該按鈕時發生的情況。 “Cookies”將每次發送,因為它們位於標題中。 但是,如果您實際上使用GET參數來發送會話信息,則必須這樣做。

發現問題似乎我沒有在注銷表單所在的索引 isset 條件下關閉表單,我的不好,因為我沒有向你們展示代碼 :D 所以問題是</form> ... pff 抱歉

當天的課程,伙計們總是關閉你</...> :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM