• 使用iframe跨域共享cookie


    请首先修改hosts文件来模拟本机跨域

    127.0.0.1 localhost
    127.0.0.1 b.com

    127.0.0.1 a.com 

    我们的目的:

    由a.com登录,如果登录成功,就生成a.com的cookie。而对于b.com则无需再次登录。

    遇到的困难:

    浏览器同源策略限制,即A站点页面的脚本是无法直接操纵B站点的内容。

    试想如果所有第三方网站都可以对taobao.com的首页任意篡改,那这个社会还有什么安全性可言呢?

     其实浏览器的安全策略逻辑很简单,就是我的地盘我做主,出了我的地盘我做不了主。

     解决方案:

    a.com根据用户输入操作a.com的cookie,b.com根据用户在a.com得到的输入数据来操作b.com的cookie。

    如何在a.com用户输入a.com的用户数据时同时提交到b.com的验证页面呢?

    这时候iframe就派上用场了。

    相关代码: 

                
    <form method="post" action="<?php print $b?>setcookie.php" target="ifrm" ><fieldset>
                    <legend>跨域获取cookie</legend>
                    <b>用户名</b>
                    <p>
                        <input type="text" id ="username" name="username"/>
                    </p>
                    <p><button onclick="login()" type="submit">Login</button></p>
                </fieldset>
            </form>

    ... 

            <iframe id ="ifrm" name="ifrm" style="display:none;" src="<?php print $b?>setcookie.php" />

    请注意form表单的相关属性,b.com/setcookie.php页面就是验证a.com用户的输入然后生成b.com的cookie,这样后续访问b.com无需再次输入用户名和密码。

     缺点:

    需要先设置跨域站点的cookie然后再来设置本域的cookie;
    如果跨域站点请求耗时较长,直接影响本域的操作时间;
    另外也需要额外的代码来处理跨域站点请求失败后的操作
    IE中需要设置接受cookie(隐私),这一点比较不方便。

    附件:/Files/1000/xdm.rar

    测试方法:

    1)按文章开头修改hosts文件

    2)登录a.com/default.php

    3)输入表单数据

    4)点击a.com/default.php下面的链接就可以在b.com/getcookie.php看到b.com的cookie

  • 相关阅读:
    form表单 获取与赋值
    转:探讨JS合并两个数组的方法
    Extjs动态增删组件
    Extjs中创建Tree菜单【一】
    Extjs中grid前端分页使用PagingMemoryProxy【二】
    python模拟线性回归的点
    TensorFlow 辨异 —— tf.add(a, b) 与 a+b(tf.assign 与 =)、tf.nn.bias_add 与 tf.add(转)
    python使用cv2显示图片像素值
    tensorflow中run和eval的区别(转)
    获取tensorflow中tensor的值
  • 原文地址:https://www.cnblogs.com/1000/p/2269615.html
Copyright © 2020-2023  润新知