先说结论:认证页面是挡在网络前面的一道门,不是网络本身。手机和接入点关联成功、界面上显示着 Wi-Fi,但所有请求都被扣住,直到完成一次网页登录。如果登录页一直不出现,那手机在「能上网」这个意义上根本没有连上——而在按地址登记设备的网络上,「私有 Wi-Fi 地址」是问题的另一半。
为什么「已连接」和「能上网」是两个状态
无线关联是链路层的约定:手机和接入点就加密方式达成一致,开始交换帧。认证页面在这之上。它拦截流量,在你完成认证之前,把所有请求都回答成一次跳转。
这就产生了酒店最典型的症状:Wi-Fi 图标满格、网络名字也对,但什么都打不开。它也产生一个不那么明显的症状:手机可能判定这个网络没有互联网、给它打上标记并降低优先级,于是你看到「已连接」,而实际上干活的是蜂窝数据。
正常情况下认证页面会自己弹出来。在 iOS 上,它表现为一个「登录」入口或一张弹出的表单。没弹出来时,通常是三种情况之一:认证页面的探测地址从未被请求到、手机的地址在认证流程跑起来之前就被拒了、或者认证页面需要一个特定的触发动作。
把登录页逼出来
按顺序做,前两条能解决大多数情况。
- 打开该网络的 ⓘ 详情页。在
设置 → Wi-Fi里点你连着的那个网络,找 登录网络 或类似的入口。这是最直接的路径,也是最容易被忽略的——因为它藏在设置里,而不是浏览器里。 - 强制发起一次明文请求。用浏览器访问
http://neverssl.com或任何一个http://地址。明文 HTTP 会触发跳转;而一个已经被手机缓存成 HTTPS 的页面可能直接从缓存加载,根本不经过认证页面。 - 临时关掉蜂窝数据。如果手机正悄悄回落到蜂窝,你可能从头到尾都看不到认证页面。
- 在 Wi-Fi 列表里再点一次该网络。重新关联往往能重新触发认证探测。
- 关掉 Wi-Fi 再打开,然后重新连接。这会让探测流程从零跑一遍。
- 忽略此网络再重新加入。这会清掉缓存的认证状态和整份网络配置,是「曾经登录成功过一次、之后一直失败」的对症一步。
「私有 Wi-Fi 地址」在这里的作用
iOS 不再出示手机的硬件地址,而是为每个网络生成一个随机地址。目的是让咖啡馆或机场无法跨次认出你这台手机、进而拼出你的行踪画像。
代价出现在两类网络上:
- 按设备地址登记的网络。按设备发准入的酒店、校园网、公司访客网络、开了 MAC 过滤的家用路由器。这些网络会把地址和白名单比对,而一个新的随机地址根本不在名单里。表现就是登录莫名其妙失败,或者关联成功、随即被拒。
- 把会话绑定到地址的认证实现。如果地址在认证页面第一次接触和完成登录之间发生了变化,页面建立的会话就和完成登录的设备对不上。登录页可能反复循环,或者显示成功但依然不给放行。
修法很窄,而且是按网络的:在设置 → Wi-Fi里打开该网络的 ⓘ,把私有 Wi-Fi 地址设为「关闭」,然后忽略并重新加入。你也可以设为「固定」——为该网络保留一个稳定的随机地址,而不是硬件地址。当场所需要一个稳定标识、而你又不想暴露硬件地址时,这个选项更合适。你不掌控的网络,保持开启。
常见误解
- 「密码不对。」密码不对的话,手机根本关联不上。Wi-Fi 图标满格却打不开,是认证页面或策略问题,不是密码。
- 「酒店的 Wi-Fi 坏了。」笔记本上能用,是因为笔记本一打开浏览器就跳出登录页,而且它的地址可能早就登记过了。手机的行为并不一样。
- 「得开 VPN 才能上网。」认证页面放行之前,VPN 帮不上忙,只会多出一样可能失败的东西。先把认证做完。
- 「干脆永久关掉私有 Wi-Fi 地址更保险。」那是隐私取舍,不是安全开关。只对要求它的那一个网络关掉,其他地方保持默认。
- 「忽略重连一次就好了。」有时只是认证会话过期了。如果你每次回来都得忽略重连,那这个网络就是按地址登记的,应该把地址设为「固定」。
Apple 在「Wi-Fi 连不上」的官方排查文档里说明了包括私有地址选项在内的 Wi-Fi 设置。Apple 没有公布过认证会话的有效时长,因为它由场所自己的系统决定而不是由 iOS 决定——任何被引用的具体时长都应当视为场所自己的规定。