[英]Unlink() doesnt remove file
我在logout.php中有此代碼
session_start();
$FileLink = 'tmp/sess_'.session_id();
//echo $FileLink ; shows the tmp/sess_3386911cc664626ffb3664c478c8ad55 file
unlink($FileLink);
session_unset();
session_destroy();
我已經讀過很多帖子說同樣的方法,但是我沒有刪除會話文件。
有什么事嗎?
我已經嘗試了所有的一切。 如果是file,iswritable,可讀,is path,將路徑更改為完整路徑,則沒有任何作用,只是未設置會話,文件將為0字節,但未刪除。
有什么建議嗎?
編輯我的php.ini
session.save_handler = "files"
session.save_path = "/home/website/public_html/gallery/tmp"
session.use_cookies = 1
session.use_only_cookies = 1
session.name = "PHPSESSID"
session.auto_start = 0
session.cookie_lifetime = 0
session.cookie_path = "/"
session.cookie_domain = ""
session.cookie_httponly = ""
session.serialize_handler = "php"
session.gc_probability = 1
session.gc_divisor = 1000
session.gc_maxlifetime = 1440
session.bug_compat_42 = ""
session.bug_compat_warn = ""
session.referer_check = ""
session.entropy_length = 0
session.cache_limiter = "nocache"
session.cache_expire = 180
session.use_trans_sid = 0
session.hash_function = 0
session.hash_bits_per_character = 5
EDIT2文件夾權限
tmp文件夾是755,並且嘗試使用777仍然是相同的,即使文件是可讀或可寫的,也嘗試過,但我確實是這樣。
您正在使用什么操作系統,我在這里看到一個非utf8字符:
echo $FileLink ; shows the tmp/sess_hkhgdfhghgöfhghggsöh file
我知道在ubuntu上那些字符被替換為? 標記,可能是問題所在?
請嘗試以下任一方法:
1)在文件夾上執行readdir並輸出文件名:
if ($handle = opendir('tmp')) {
while (false !== ($entry = readdir($handle))) {
echo "$entry\n";
}
closedir($handle);
}
2)將非字母數字替換為問號:
$FileLink = preg_replace("/[^A-Za-z0-9 ]/", '?', $FileLink);
unlink($FileLink);
最終,session_id()會給您提供非utf8字符的問題,我現在正在研究中。
3)通過設置無效的ID將文件所有權設置為NoBody:
chown($FileLink, 666);
4)在創建會話之前,自己創建會話文件:
$fp = fopen('tmp/sess_3386911cc664626ffb3664c478c8ad55', 'w+');
fclose($fp);
session_id('3386911cc664626ffb3664c478c8ad55');
session_start();
您可以復制PHP用於創建會話名稱的算法。 我希望刪除后可以正常工作。
僅用於測試目的。
我不知道這是否有用,但是下面的測試代碼被證明是成功的。
<?php
session_start();
$ses_id = session_id();
echo $ses_id;
$filename = 'test_folder/sess_'.$ses_id;
$fp = fopen($filename, 'w');
fwrite($fp,"");
fclose($fp);
unlink($filename);
在這一點上,我能想到的是,您可以嘗試從上一頁獲取會話的變量,然后它看起來像:
[第一頁]
session_start();
$ses_id = "sess_" .session_id();
echo '<a href="check_session.php">Check session</a>';
[登出頁面]
session_start();
$FileLink = 'tmp/sess_'.$ses_id;
unlink($FileLink);
session_unset();
session_destroy();
[檢查會話](check_session.php)
<?php
session_start();
if(!empty($_SESSION)){
echo "sess_" .session_id();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.