V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
csdreamdong
V2EX  ›  问与答

session 到底是什么鬼,有没有比较形象的解释。。0 0.

  •  
  •   csdreamdong · 2016-04-25 15:07:08 +08:00 · 3136 次点击
    这是一个创建于 3138 天前的主题,其中的信息可能已经有所发展或是发生改变。
    1. session 到底是什么鬼,一个纯静态的 web 站,有 session 嘛?

    2. 如果我有 2 个 web 的站,一个 php 的,一个是 django 的,他们之间能共享 session 嘛?

    27 条回复    2016-04-25 21:32:26 +08:00
    ihuotui
        1
    ihuotui  
       2016-04-25 15:47:59 +08:00
    能共享,要自己实现。
    zjdboy
        2
    zjdboy  
       2016-04-25 15:50:57 +08:00
    看看 COOKIE 是什么鬼,,然后再想 COOKIE 和 SESSION 有啥区别
    yao978318542
        3
    yao978318542  
       2016-04-25 16:06:38 +08:00
    我身上有 100 块 然后在建设银行存着 然后你去了外地 你在外地的建设银行也能取! 明白了吗?
    csdreamdong
        4
    csdreamdong  
    OP
       2016-04-25 16:18:22 +08:00
    @yao978318542 其实。 session 的存在,必须依赖于 cookies 嘛?
    juicy
        5
    juicy  
       2016-04-25 16:23:00 +08:00
    @csdreamdong cookies 相当于存着身份证号,要不然银行不知道你要取的是哪个身份证下银行账号的钱
    csdreamdong
        6
    csdreamdong  
    OP
       2016-04-25 16:27:07 +08:00
    @juicy so..如果浏览器禁用 cookies 的话。。想普通网站的登录,登录后,随便点击一个连接,又相当于没登录的状态了?
    Ouyangan
        7
    Ouyangan  
       2016-04-25 16:30:49 +08:00
    上 redis 可以共用
    hcymk2
        8
    hcymk2  
       2016-04-25 16:30:58 +08:00
    身份证号 可以放在不同载体上面
    jugelizi
        9
    jugelizi  
       2016-04-25 16:31:17 +08:00
    难道百度真的回答不了你的问题?
    clino
        10
    clino  
       2016-04-25 16:31:31 +08:00
    csdreamdong
        11
    csdreamdong  
    OP
       2016-04-25 16:33:25 +08:00
    @hcymk2 除了显示或者隐式的 post , get 身份证号。。那么每次的访问,服务器都永远不会知道我是谁咯??在禁用 cookies 的情况下。
    csdreamdong
        12
    csdreamdong  
    OP
       2016-04-25 16:34:35 +08:00
    @jugelizi 0 0.有点混乱,,我疑惑的地方,就是 session 。。是不是 http 或者 tcp 的一个特性。。?
    hxsf
        13
    hxsf  
       2016-04-25 16:37:33 +08:00   ❤️ 1
    r#12 @csdreamdong http 是无状态的,但是浏览器想有状态,于是有了 cookies 和 session 。这是浏览器提供的功能,如果怕禁用 cookies ,就用类似的手法自己维持状态就行,比如 C/S 中 Token 的方式 (其实跟 cookies 和 seesion 一个道理)。
    csdreamdong
        14
    csdreamdong  
    OP
       2016-04-25 16:43:15 +08:00
    @hxsf ok..基本了解。
    csdreamdong
        15
    csdreamdong  
    OP
       2016-04-25 16:47:16 +08:00
    @hxsf 还有一个问题,访问一个页面, response 中的 set-cookies 是要由程序语言去实现的咯。。?
    hxsf
        16
    hxsf  
       2016-04-25 16:51:37 +08:00
    r#15 @csdreamdong 一般来说 cookies 里的 sessionid 是 自动写进的 (有些要自己动手),其他的你想写进 cookies 的需要自己代码写
    csdreamdong
        17
    csdreamdong  
    OP
       2016-04-25 16:54:37 +08:00
    @hxsf 0 0.自动。。的话,是谁做的呢?总有个程序吧。。 apache 还是 nginx 这种 web 前端?
    csdreamdong
        18
    csdreamdong  
    OP
       2016-04-25 16:58:05 +08:00
    @hxsf 我是 python 。。写一个 wsgi 的 app 。。如果要处理 session ,那还是需要代码实现的咯。
    php 的话,有 session 的机制,我意思 session 这种机智,是需要代码实现的,还是 web 前端( apache , nginx )来搞定的?
    yeyeye
        19
    yeyeye  
       2016-04-25 17:12:41 +08:00
    没说一定要依赖 cookies 啊 可以依赖 url 啊
    mlhorizon
        20
    mlhorizon  
       2016-04-25 18:04:12 +08:00
    大概可以理解为存在服务器上的全局变量吧,用来在页面间共享一些状态数据等。
    just1
        21
    just1  
       2016-04-25 18:31:11 +08:00 via Android
    既然你用 python , tornado 就好了,干嘛搞自己不熟悉的 php
    jame
        22
    jame  
       2016-04-25 19:25:26 +08:00
    现成的 Python 代码: https://github.com/dound/gae-sessions
    shiji
        23
    shiji  
       2016-04-25 20:13:22 +08:00 via Android
    session 储存在服务器上, cookie 储存在本机上。二者有些类似。

    静态页面也可能使用 session (比如你用了 cnzz 谷歌统计)什么的,用于追踪用户行为。
    lightening
        24
    lightening  
       2016-04-25 21:05:45 +08:00   ❤️ 1
    HTTP 是无状态的。也就是说, HTTP 不保存诸如“用户是谁”,“用户进行到哪一步了”这种信息。

    如果你需要保存这种信息,就要自己去实现。这就是 session 。

    Cookie 是实现 session 的一种方式。由于服务器去记录每个客户的 session 开销比较大,于是就让客户端自己记录自己是谁、或者自己进行到哪一步了这种信息。然后服务器一般使用一个签名来确保 cookie 是自己发放的,没有被篡改。

    这有点像一个学校的门卫,与其记住每个学生的脸来判断他是不是本校学生,不如给每个学生发一张学生证,凭证入场。
    Ouyangan
        25
    Ouyangan  
       2016-04-25 21:29:58 +08:00
    推荐博主可以看<<深入分析 javaweb>>里面关于 session 和 cookie 的章节.
    bikong0411
        26
    bikong0411  
       2016-04-25 21:31:34 +08:00 via iPhone
    @yao978318542 哈哈哈
    bikong0411
        27
    bikong0411  
       2016-04-25 21:32:26 +08:00 via iPhone
    @csdreamdong 不一定必须要依赖 cookie ,只不过大多数情况下 session_id 在 cookie 里发送到服务端
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5990 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 02:52 · PVG 10:52 · LAX 18:52 · JFK 21:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.