基于扩展会话的后端和第三方Cookie

时间:2016-11-02 22:08:57

标签: cookies cors amp-html

试图了解这个电子商务场景......

  1. 我在放大器中构建了一个具有新放大器形式的放大器产品页面
  2. 添加到购物车按钮是我后端的XHR(基于会话,使用 默认情况下使用cookies)
  3. 用户搜索产品和结果 到我的放大器产品页面,但他们从未去过我的网站
  4. 他们提交了添加到购物车表格
  5. CORS预检使其成为我后端的方式,我根据https://github.com/ampproject/amphtml/blob/master/spec/amp-cors-requests.md设置了所有正确的预检
  6. 现在发出了实际请求...后端初始化会话, 将会话标识符作为cookie返回,但由于用户从未访问过 我的网站...只是谷歌放大器缓存它被视为第三方 cookie和浏览器丢弃它(导致用户禁用第三方cookie)
  7. 用户会话已丢失,其添加到购物车操作
  8. 也是如此

    所以问题是,如何保持会话和购物车中的项目? 我错过了什么吗?我有没有看到的伎俩?

    欣赏任何见解。

2 个答案:

答案 0 :(得分:3)

将购物车与CLIENT_ID相关联是解决此问题的最佳方法。很遗憾,AMP尚不支持转移CLIENT_ID via表单。它目前正在实施,您可以观看此issue获取当前状态。

这是一种现在可行的方法:我们的想法是将购物车内容编码为在表单结果中返回的字符串。这样我们就可以生成"查看购物车"和"结帐"包括购物车内容在内的链接。用户点击其中一个链接后,您可以在后端创建实际的购物车,并将用户ID存储在Cookie中。

例如:

<form action-xhr="/add-to-cart" method="POST">
  <input type="hidden" name="itemId" value="headphones-123">
  <!-- Hide after form submit success -->
  <input type="submit" name="add" value="Add to Cart">

  <div submit-success>
    <template type="amp-mustache">
      <!-- shopping cart contents, e.g headphones-123  -->
      {#shoppingCartContent}
         <a href="/cart/view/{{shoppingCartContent}}">View In Cart</a>
         <a href="/cart/checkout/{{shoppingCartContent}}">Checkout</a>
      {/shoppingCartContent}
    </template>
  </div>
  <div submit-error>
     <template type="amp-mustache">
       {{message}} <!-- e.g. Only 2 Headphones are left. -->
     </template>
  </div> 
</form>

这种方法的缺点是,当用户离开页面而不首先查看购物车时,购物车将丢失。一旦CLIENT_ID可以通过放大器形式传递,这将得到解决。

答案 1 :(得分:1)

我也知道有关AMP网页的信息非常有限,但我建议您阅读使用User identification并尝试使用AMP生成的client ID。如文档中所述:

  

默认情况下,AMP将管理客户端ID的提供,无论是从发布者的原始网站还是通过缓存访问该页面。

同样,请详细了解客户端ID替换,包括如何在Variables supported in AMP analytics中添加可选的用户通知ID。

希望有所帮助!