我在logout.php中有这段代码
session_start();
$FileLink = 'tmp/sess_'.session_id();
//echo $FileLink ; shows the tmp/sess_3386911cc664626ffb3664c478c8ad55 file
unlink($FileLink);
session_unset();
session_destroy();
我已经阅读了很多帖子说同样的方法但我没有得到会话文件被删除。
什么都不对?
我已经尝试了大部分内容。如果是文件,可写,可读,是路径,更改路径到完整路径,没有任何工作,只是会话取消设置,文件将是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并且仍然相同,即使文件是可读写的也可以尝试,我认为它们是真的。
答案 0 :(得分:0)
你在使用什么操作系统,我在这里看到一个非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用于创建会话名称的算法。我希望删除后应该可以正常工作。
答案 1 :(得分:0)
仅用于测试目的。
我不知道这是否有用,但我的测试代码证明是成功的。
<?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();
}