Linux 下php的session出现session_start()denied解决

先定位到 cd /var/lib/php地下有个session的文件夹
用 ls -l 插烂他的读写状态,若为只读, 用chomd 777 *
将文件夹的读写状态改为可读可写可执行,然后问题解决

以下是一个完整的示例,包含登录页面生成唯一性 token、跳转到用户页面以及退出页面功能,退出时会删除浏览器和本地的 token。 #### 1. `login.php`:登录页面 ```php <?php session_start(); // 生成唯一的 token $_SESSION['token'] = bin2hex(random_bytes(16)); ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>登录页面</title> </head> <body> <div class="login"> <h2>后台登录</h2> <form action="token_check.php" method="post"> <input type="hidden" name="token" value="<?php echo $_SESSION['token']; ?>"> <label for="username">用户名:</label> <input type="text" name="username" id="username" required> <label for="password">密码:</label> <input type="password" name="password" id="password" required> <input type="submit" value="登录"> </form> </div> </body> </html> ``` #### 2. `token_check.php`:验证登录信息和 token ```php <?php session_start(); // 获取用户提交的 token $submittedToken = $_POST['token']; // 验证 token if ($submittedToken !== $_SESSION['token']) { header('HTTP/1.1 403 Forbidden'); $_SESSION['token'] = bin2hex(random_bytes(16)); echo 'Access denied'; exit; } else { // 验证用户名和密码(这里简单示例) if ($_POST['username'] == 'admin' && $_POST['password'] == 'admin') { // 登录成功,生成新的 token 并保存到 cookie $_SESSION['token'] = bin2hex(random_bytes(16)); setcookie('token', $_SESSION['token'], time() + 3600, '/'); // 跳转到用户页面 header('Location: user_page.php'); exit; } else { echo '登录失败'; } } ``` #### 3. `user_page.php`:用户页面 ```php <?php session_start(); // 获取 cookie 中的 token $token = $_COOKIE['token']?? ''; // 验证 token if ($token !== $_SESSION['token']) { header('HTTP/1.1 403 Forbidden'); $_SESSION['token'] = bin2hex(random_bytes(16)); echo 'Access denied'; exit; } ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>用户页面</title> </head> <body> <h2>欢迎来到用户页面</h2> <a href="logout.php">退出登录</a> </body> </html> ``` #### 4. `logout.php`:退出登录页面 ```php <?php session_start(); // 删除 session 中的 token unset($_SESSION['token']); // 删除 cookie 中的 token setcookie('token', '', time() - 3600, '/'); // 跳转到登录页面 header('Location: login.php'); exit; ``` ### 代码解释 - `login.php`:生成唯一的 token 并将其隐藏在表单中,用户提交表单时将 token 发送到 `token_check.php` 进行验证。 - `token_check.php`:验证用户提交的 token 是否与 session 中的 token 一致,若一致则验证用户名和密码,登录成功后生成新的 token 并保存到 cookie 中,然后跳转到用户页面。 - `user_page.php`:验证 cookie 中的 token 是否与 session 中的 token 一致,若一致则显示用户页面,提供退出登录的链接。 - `logout.php`:删除 session 中的 token 和 cookie 中的 token,然后跳转到登录页面。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值