Cookie 从哪里来,网站用它来干嘛?

1. 什么是Cookie,它的用途是什么?

Cookies是一些存储在用户电脑上的小文件。它是被设计用来保存一些站点的用户数据,这样能够让服务器为这样的用户定制内容,后者页面代码能够获取到Cookie值然后发送给服务器。比如Cookie中存储了所在地理位置,以后每次进入地图就默认定位到改地点即可。

2. 通过什么方式能获取到Cookie的内容,我能查看自己电脑上的Cookie吗?

能通过Web Server或者客户端浏览器来获取到Cookie。多数浏览器能够配置允许用户访问Cookies,但是注意不同的站点之间的Cookie是不能共享的。打开Chrome的调试窗口可以在Resource的Cookie侧边栏查看,或者在console中输入document.cookie来查看,这属于在电脑上行查看,另外一种服务器中查看可见后面的例子。

3. Cookie是什么时候生成的,完整的生成、传递和使用过程是怎么样的?

写数据到Cookie中通常是在一个页面被加载的时候,比如提交按钮被按下,后台处理完请求跳转到相应页面后会把Cookie值带回来,如下是一个例子:

* 你在浏览器地址栏输入了一个站点,然后浏览器会发送请求到站点的Web服务器请求该页面
* 与此同时,浏览器会在个人电脑上行查找和该站点对应的Cookie文件,如果发现了就会把里面的键值对内容全部发送给Web服务器,如果没找到则不发送。
* 页面服务器接收到了Cookie的数据后,可以利用这些数据决定返回到前台的内容(更进一步是跟Session结合使用)
* 如果没键值对被Web服务器接收到,站点就知道该用户没有访问过,就会为这个访问地址新建一个ID并且发送一些键值对给前台,这些值会被放在这次响应中的Header带给浏览器,浏览器端于是有了Cookie的值
* 任何到服务的访问和数据请求都可能很对Cookie中的键值对进行修改

4. 一个简单的使用Cookie例子。

以python的项目flasky(一个python框架Flask的示例项目,内含完整的开发代码路径)为例,将使用git代码checkout到3b的历史节点,配置环境启动并确保http://127.0.0.1:5000/访问成功。

将代码hello.py修改如下:

@app.route('/')
def index():
    try:
        print 'answer = ', request.cookies.get('answer')
        response = make_response('<h1>This document carries a cookie!</h1>')
        if request.cookies.get('answer') == None:
            response.set_cookie('answer', '42')
        else:
            response.set_cookie('answer', (request.cookies.get('answer') + '+'))

    except Exception, e:
        print e
    finally:
        return response
扫描二维码关注公众号,回复: 6614015 查看本文章

在服务端代码中获取Cookie值,如果没有设置过就设置为“42”,否则就在原来的基础上增加“+”。每次刷新页面,可以看到后台打印的内容不停的累加“+”,浏览器中查看answer的值也一直在累加:

5. 使用Cookie存在的一些问题?

* 多个用户公用一台电脑比如网吧,那么前一个人登陆购物网站并购买物品,后一个人可以使用前一人的账号进行购物。
* 清除浏览器缓存等操作可以擦出掉Cookie,因而很难恢复之前做过的操作,要查看添加到购物车商品几乎不可能。
* 多太电脑之间的网站浏览记录(这里不是浏览器的历史记录)会不一致,比如这台电脑某宝告诉你你浏览过某些商品,另一台电脑可能是另外一些商品,因为不同Cookie对应的不同浏览记录。

这也是为什么需要使用账号登陆的原因,只要登陆过就能把所有记录跟后台数据库中的账号强关联起来。

整理和学习居多,如有不准确,还请指正。

欢迎大家关注公众号“创小董”我会继续分享更多更真实的创业经历、经验、解决办法。

猜你喜欢

转载自blog.csdn.net/dong2008hong/article/details/93483467