V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
chenyg32
V2EX  ›  PHP

Session重定向的时候失效了……php大神在哪里

  •  
  •   chenyg32 · 2013-12-05 02:22:03 +08:00 · 7615 次点击
    这是一个创建于 4005 天前的主题,其中的信息可能已经有所发展或是发生改变。
    3个页面reg.php, login.php, main.php。(分别代表注册,登录和首页)
    现在我在reg.php用curl的方式post给login.php值,然后login.php将其保存为session,之后reg.php重定向到main.php。此时main.php的session是空的。

    我试了下,在Login.php输出session,是正确的,也就是说reg.php的curl方式的post成功了,login.php也保存session了。但是跳转到main.php所有session就没了。

    还有一点,如果是从Index.html输入用户名密码,post给login.php,login.php判断后重定向到main.php,注意,这里的session是却成功的。

    网上说是utf-8带Bom编码的原因,我也确实是用utf-8带bom编码,但改成无bom也是同样的问题,而且如果直接从Index.html登录的话session也不会消失呀,所以我不明白,为什么跳转着跳转着session就没了~
    15 条回复    1970-01-01 08:00:00 +08:00
    chenyg32
        1
    chenyg32  
    OP
       2013-12-05 02:34:00 +08:00
    我好像有点想法了。是不是curl()打开的网页是新开的,与我当前的无关,所以即使保存了session也是徒劳的。根本不是同一个范围内的。
    chenyg32
        2
    chenyg32  
    OP
       2013-12-05 02:37:14 +08:00
    话又说回来了,既然不能用curl,那php之间应该怎么传值?
    11
        3
    11  
       2013-12-05 02:47:02 +08:00   ❤️ 1
    为什么要用curl?直接用 $_POST[] 获取呀。
    raincious
        4
    raincious  
       2013-12-05 08:59:38 +08:00   ❤️ 1
    楼主,为什么要这么纠结呢。

    你的reg.php将数据POST给login.php,login.php(注意是login.php)会根据自己的环境计算COOKIE的KEY,这里的环境也仅包含请求方reg.php的HTTP HEADER。

    这样的话,main.php和reg.php肯定是读不到这个KEY邦定SESSION的。
    kuye
        5
    kuye  
       2013-12-05 09:18:21 +08:00   ❤️ 1
    session的获取是基于cookie 的,curl的时候带上之前产生的cookies,一般来说是$_COOKIE['PHPSESSID'],就可以了
    justfindu
        6
    justfindu  
       2013-12-05 09:42:55 +08:00   ❤️ 1
    curl应该算重开了一个进程 而且这个进程不属于用浏览器打开的用户 而是服务器吧
    cute
        7
    cute  
       2013-12-05 11:18:07 +08:00   ❤️ 1
    要把curl获取到cookie自己传到客户端.
    macdino
        8
    macdino  
       2013-12-05 12:21:13 +08:00   ❤️ 1
    1、session没写成功,看一下你的session目录有没有写成功
    2、跨域
    chenyg32
        9
    chenyg32  
    OP
       2013-12-05 12:40:08 +08:00
    @11 直接用Post获取?在哪个页面获取?
    raincious
        10
    raincious  
       2013-12-05 12:52:25 +08:00   ❤️ 1
    @chenyg32 要实现登陆什么的,PHP页面之间不需要传值。

    如果需要数据临时储存,可以使用Cookie在客户端和服务器之间来回传递。Cooke设置好之后,范围内的页面都能读取。

    还有更常用的方式就是使用$_SESSION数组或者自己实现数据库的Session,然后根据某个条件(比如用户ID什么的)读取。
    bombless
        11
    bombless  
       2013-12-05 15:49:30 +08:00   ❤️ 1
    session是基于cookie的,如果用户关掉了cookie,那session也不会起作用,这是其一。
    我简单说一下,如果按照楼主现在这个页面跳转逻辑要怎么改。
    因为你的session id是login.php给出的,而用户没有访问过login.php,他访问的是reg.php
    所以现在的任务是从reg.php获取一个客户端状态,让他能够保持到后面对main.php的访问上去。
    在reg.php脚本里面,你先从login.php拿到Set-Cookie头和Cookie头,然后把它们原样输出到头部。
    这样,后面用户访问main.php的时候就能回到login.php那次会话了。
    jarlyyn
        12
    jarlyyn  
       2013-12-05 21:32:15 +08:00
    ...不是应该include么?
    beaaar
        13
    beaaar  
       2013-12-06 10:58:23 +08:00
    一定要给login.php去写session么?直接在reg.php写就行了,不过不知道楼主是不是有什么特殊的需求
    johnlui
        14
    johnlui  
       2013-12-06 17:10:05 +08:00 via Android
    curl……
    看起来像是正在入门而且还不好好看教程……
    chenyg32
        15
    chenyg32  
    OP
       2013-12-06 21:48:07 +08:00
    @johnlui 你怎么知道!!我确实入门不到5天……
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1236 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 18:00 · PVG 02:00 · LAX 10:00 · JFK 13:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.