PHP招聘网站开发问题:发布职位时如何获取$_SESSION中的ID
解决PHP招聘网站发布广告时获取SESSION中ID的问题
嗨,这问题其实挺常见的,咱们一步步拆解来解决:
1. 先确保Session全局初始化
所有涉及Session操作的页面(登录页、后台管理页、发布广告页),必须在页面最顶部(任何HTML输出之前)加上这句代码开启Session功能:
session_start();
要是漏了这一步,$_SESSION数组根本就不存在,自然拿不到里面的ID。
2. 用户登录成功时存入企业主ID到Session
在登录验证逻辑里,当你从owner_company表查到合法的企业主信息后,把他的id存入Session:
// 假设你已经通过邮箱+密码验证了用户,$valid_owner是查询到的owner_company表数据 $_SESSION['owner_id'] = $valid_owner['id']; // 也可以顺便存个用户名,方便后台页面显示 $_SESSION['owner_fullname'] = $valid_owner['name'] . ' ' . $valid_owner['surname'];
这样用户在整个会话期间,这个ID会一直保存在服务器端的Session中。
3. 发布广告时读取Session中的ID
进入发布广告的页面后,先确认Session已开启(同样开头加session_start()),然后先做登录校验,防止未授权访问:
session_start(); // 检查Session里的owner_id是否存在,不存在就跳回登录页 if (!isset($_SESSION['owner_id'])) { header("Location: login.php"); exit; } // 取出企业主ID $current_owner_id = $_SESSION['owner_id'];
4. 关联获取对应的company_id
因为job_advertising表需要company_id,而这个ID存在companies表中(关联字段是owner_id),所以我们要根据已有的owner_id查询对应的公司ID:
// 推荐用PDO或mysqli预处理语句,避免SQL注入风险 // 以PDO为例: $pdo = new PDO('mysql:host=你的数据库主机;dbname=你的数据库名', '账号', '密码'); $stmt = $pdo->prepare("SELECT id FROM companies WHERE owner_id = ?"); $stmt->execute([$current_owner_id]); $company_info = $stmt->fetch(PDO::FETCH_ASSOC); if (!$company_info) { // 如果没查到对应公司,提示用户先完成企业信息注册 echo "请先完成企业信息绑定再发布广告!"; exit; } $current_company_id = $company_info['id'];
5. 插入招聘广告数据
最后把获取到的owner_id、company_id和广告内容插入到job_advertising表:
$stmt = $pdo->prepare("INSERT INTO job_advertising (company_id, owner_id, description, salary) VALUES (?, ?, ?, ?)"); $stmt->execute([$current_company_id, $current_owner_id, $_POST['description'], $_POST['salary']]); // 插入成功后可以提示用户或跳转到广告列表页 echo "招聘广告发布成功!";
额外安全提醒
- 永远不要直接把用户输入拼进SQL语句,一定要用预处理语句防范SQL注入
- 可以给Session设置合理的过期时间,增强账号安全性
- 所有后台页面都要加上登录校验逻辑,防止未授权访问
内容的提问来源于stack exchange,提问作者user9441754




