You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP8.0.3调用setcookie触发TypeError报错求修复方案

PHP 8 setcookie类型错误修复方案

你遇到的报错是PHP 8强类型校验和参数顺序错误共同导致的,具体修复方案如下:

错误根因

你贴出的报错:

Fatal error: Uncaught TypeError: setcookie(): Argument #3 ($expires_or_options) must be of type array|int, string given in D:\xampp\htdocs\ford\logoff.php:9 Stack trace: #0 D:\xampp\htdocs\ford\logoff.php(9): setcookie('PHPSESSID', '1629284838', '/') #1 {main} thrown in D:\xampp\htdocs\ford\logoff.php on line 9

触发原因有两个:

  1. setcookie参数顺序错误:标准setcookie参数顺序为cookie名称、cookie值、过期时间、路径、域名...,你的代码跳过了cookie值参数,把路径"/"传到了仅支持整数/数组类型的第三个参数位置,PHP 8的强类型校验直接触发报错。
  2. 变量拼写错误:代码中$_SESSEION拼写错误,正确为$_SESSION,会导致会话变量清空逻辑失效。

修复后完整代码

<?php
session_start();
if(isset($_SESSION["logged_in"])){
    // 修正拼写错误,清空会话变量
    $_SESSION = [];
    if(ini_get('session.use_cookies')){
        // 补全参数顺序,第二个参数传空字符串作为cookie值
        setcookie(session_name(), '', time() - 15, "/");
    }
    session_destroy();
    header("Location:login.php");
}
else{
    header("Location:login.php"); 
}
?>

如果需要配置cookie的域名、安全传输、HttpOnly等属性,也可以用数组形式传参,兼容性更好:

setcookie(session_name(), '', [
    'expires' => time() - 15,
    'path' => '/',
    'secure' => false, // 开启HTTPS后可改为true
    'httponly' => true // 建议开启,防止XSS窃取cookie
]);

内容的提问来源于stack exchange,提问作者Aizaz ul haq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 10:06:03