簡體   English   中英

掃描唯一二維碼后,手機瀏覽器緩存上一次掃描二維碼的web頁面

[英]After scanning unique QR-code, mobile browser caches web page of previous QR-code scanned

情況:
我有多個二維碼; 這些都具有相同的格式,即它們指的是一個網站,但是由於每個 QR 碼都是唯一的,URL 也包含唯一的 QR-id。 So QR-code id 1 contains a reference to URL, eg: https://mywebsite.com/processqr.php?id=1 QR-code id 2 contains a reference to URL: https://mywebsite.com/processqr. php?id=2等。

問題:
當你第一次掃描二維碼 id 1 時,手機瀏覽器會顯示屬於二維碼 id 1 的網頁。這樣就可以了。 當你再用同一部手機掃描二維碼 id 2 時,二維碼 id 1 的網頁又出現了!!

但是,並非每部手機都會出現這種情況。 使用 iPhone 6(使用 IOS 12.4.8 和 Safari)不會發生上述情況。 對於 iPhone 5SE、iPhone 8 或 Android,這種情況確實會發生。

我試過的:
(1) 由於這看起來像是一個緩存問題,我嘗試使用此處描述的解決方案禁用生成網頁的緩存: How do we control web page caching, across all browsers? 不幸的是,這並不能解決這個問題......

(2) 當您清除緩存 - mywebsite.com - 在移動設備上它再次起作用; 但只有一次。 如果您隨后嘗試掃描 QR-id 3,則會顯示上一個掃描的 QR-id 的網頁。 但是,每次掃描后手動清除緩存並不是一個實用的解決方案。

(3) Apache 網絡服務器訪問日志文件確實列出了 QR 碼中包含的正確網站 URL。 所以在服務器端正確接收到URL,然后生成正確的網頁,但不知何故手機一直顯示以前的網頁。

有什么想法嗎? 提前致謝!

問候, 埃里克

我找到了問題和解決方案,但我無法完全解釋。

導致該問題的代碼與此類似:

if (!isset($_SESSION['sessionkey'])) {
        $_SESSION['sessionkey'] = session_id();
        $_SESSION['QRid'] = $_GET['id'];
}

// use QR-id via $_SESSION['QRid']

問題是,當您第二次掃描不同的二維碼時,$_SESSION['sessionkey'] 仍然具有第一次掃描的值,因此 $_SESSION['QRid'] 也具有第一次掃描時的值掃描,從而把事情搞砸了。

我通過在 if 語句中添加另一個子句解決了這個問題:

if (!isset($_SESSION['sessionkey']) or $_GET['id'] != $_SESSION['QRid']) {

我不明白為什么代碼有時有效,有時無效。 原始代碼在 iPhone 6 和 iPhone 11 上完美運行,但在 iPhone 8 上卻失敗了......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM