【问题标题】:Safari : Form submissionSafari : 表单提交
【发布时间】:2013-02-14 08:47:11
【问题描述】:

由于未知原因,登录表单无法在 Safari 中工作(从 5.1.x 到最新版本)。但也适用于其他浏览器。

完整代码(页面为index.php

<?php
ini_set('display_errors', '1');
$err = '';
if(isset($_POST['action']) && $_POST['action'] == 'login') {
    require_once('require_once.php');
    $ans = Core::Authenticate($_POST['txt_user'], $_POST['txt_pass']);
    if($ans) {
        session_set_cookie_params(3600, domain_path);
        session_start();
        $_SESSION['login_key'] = 'A COMPLEX LOGIC';
        header('Location: console.php');
        exit;
    } else {
        $err = 'Invalid Username / Password';
    }
}
?>
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>Login</title>
    <link rel="stylesheet" type="text/css" href="css/style.css" />
</head>
<body>
    <div id="login_wrapper">
        <form action="index.php" method="post">
        <input type="hidden" name="action" value="login" />
        <h1>Welcome</h1>
    <?php
    if($err != '') {
        echo '<p>Error: ' . $err . '</p>' . PHP_EOL;
    }
    ?>
                <table class="tbl_login">
            <tr>
                <td>Username</td>
                <td><input type="text" name="txt_user" /></td>
            </tr>
            <tr>
                <td>Password</td>
                <td><input type="password" name="txt_pass" /></td>
            </tr>
            <tr>
                <td>&nbsp;</td>
                <td><button>Login</button></td>
            </tr>
        </table>
        </form>
    </div>
</body>
</html>

Core::Authenticate 是一个在凭据匹配时返回 true 的函数。

require_once.php 包含其他所需文件,例如配置文件、数据库库等。

domin_path 是脚本的绝对路径,在全局范围内定义。

我认为这不是服务器端错误,因为其他浏览器(Chrome、IE、Firefox)也可以工作。

我怀疑这是由于&lt;button&gt; 标签造成的,但是当我查找文档时(来自Safari HTML ReferenceMDN),自Safari 1.0 起支持不带type 属性的按钮标签。因此我尝试将其更改为 &lt;input type="submit" value="Login" /&gt;,但 Safari 仍然拒绝工作(重定向到同一页面而没有任何消息)。

我还看错了什么?

注意:在 Safari 中未检测到/显示任何问题。也没有控制台消息。该页面也通过了 W3C HTML 验证。

【问题讨论】:

  • 请定义“不工作”。是不是意味着按钮不提交表单?
  • 它提交表单,但重定向到同一页面而没有任何错误消息
  • 这个页面是index.php页面吗?
  • @ShivanRaptor 你能粘贴表单处理 php 代码吗?
  • 如果表单提交,问题出在服务器端。

标签: html safari


【解决方案1】:

终于找到Safari无法提交表单的原因了。

不知何故,domain_path 设置不正确。它不包含前导 /。修正域路径后,session_set_cookie_params()函数正常工作。

但为什么其他浏览器运行良好?

【讨论】:

  • 如果您使用 javascript 创建 cookie,请检查此答案:stackoverflow.com/a/5671466/1136132
  • 不错的参考,但您所指的答案不是特定于 Safari 的。好吧,也许它在这 2 年后修复了。让我稍后重试该场景。
  • 我昨天在 Safari(版本 5.1.7 - 最后一个 Windows 稳定版本)上遇到了这个问题,所以还没有解决!而且您的解决方案效果很好:)
猜你喜欢
  • 2013-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-03
  • 2019-08-15
  • 2012-01-08
  • 2011-03-12
  • 1970-01-01
相关资源
最近更新 更多