浏览器未自动提示保存用户名和密码问题求助
解决浏览器不提示保存登录凭据的问题
问题分析
核心问题在于登录流程中,浏览器无法识别这是一次成功的登录操作,因此不会触发保存凭据的提示。主要诱因是当前的跳转方式,以及表单提交的处理逻辑存在兼容性问题。
修复步骤
1. 调整登录成功后的跳转逻辑
当前使用header('refresh: 0; url=...')的跳转方式会干扰浏览器对登录成功状态的识别,改用标准HTTP重定向即可解决:
if ($kontrol) { $_SESSION['admin']['login'] = 1; $_SESSION['admin']['id'] = $kontrol['ID']; $_SESSION['admin']['Firma_Adi'] = $kontrol['Firma_Adi']; $_SESSION['admin']['Tur'] = $kontrol['Tur']; $_SESSION['admin']['kod'] = $kontrol['Kod']; $_SESSION['admin']['yetkili'] = $kontrol['Yetkili']; $_SESSION['admin']['plasiyer'] = $kontrol['PlasiyerID']; // 替换refresh跳转为标准Location重定向 header('Location: ' . $site . 'ozet'); exit; // 必须添加exit,终止后续代码执行,避免输出干扰 }
注意:调用
header('Location: ...')前,必须确保没有任何输出(包括空格、HTML标签、echo内容等),否则重定向会失效。
2. 修复表单action属性问题
空action可能导致部分浏览器无法正确识别表单提交行为,改为动态输出当前页面路径:
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" autocomplete="on"> <!-- 原有表单内容保持不变 --> </form>
如果之前设置action="index.php"导致页面异常,检查index.php是否包含完整的登录处理逻辑,或者当前页面文件名是否并非index.php。
3. 确认表单识别的关键属性
虽然你已设置autocomplete,但再次确认以下标准登录表单的必要条件:
- 用户名输入框
autocomplete="username"、密码框autocomplete="current-password"设置正确 - 表单使用
method="post"提交 - 提交按钮为
type="submit"(你的代码已满足)
额外安全提醒
你的代码存在严重安全隐患:
- 直接将用户输入拼接到SQL语句中,极易引发SQL注入攻击,改用PDO预编译语句:
$kontrol = $db2->prepare("SELECT * FROM Firma WHERE Kod = :username AND Parola = :password_hash"); $kontrol->execute(['username' => $AD, 'password_hash' => $kontrol['Parola']]);
- 数据库存储明文密码风险极高,注册时用
password_hash()生成哈希值,登录时用password_verify()验证:
// 注册时存储哈希 $hashed_pwd = password_hash($user_input_pwd, PASSWORD_DEFAULT); // 登录时验证 if (password_verify($sifre, $kontrol['Parola'])) { // 执行登录成功逻辑 }
内容的提问来源于stack exchange,提问作者Oğuzhan Eker
相关产品推荐
相关产品推荐

