chenyg32
V2EX  ›  PHP

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

  •  
  •   chenyg32 · Dec 5, 2013 · 8687 views
    This topic created in 4718 days ago, the information mentioned may be changed or developed.
    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 replies  •  1970-01-01 08:00:00 +08:00
    chenyg32
    chenyg32
    OP
    Dec 5, 2013
    1
    我好像有点想法了。是不是curl()打开的网页是新开的,与我当前的无关,所以即使保存了session也是徒劳的。根本不是同一个范围内的。
    chenyg32
    chenyg32
    OP
    Dec 5, 2013
    2
    话又说回来了,既然不能用curl,那php之间应该怎么传值?
    11
    11
    Dec 5, 2013❤️1
    3
    为什么要用curl?直接用 $_POST[] 获取呀。
    raincious
    raincious
    Dec 5, 2013❤️1
    4
    楼主,为什么要这么纠结呢。

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

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

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

    还有更常用的方式就是使用$_SESSION数组或者自己实现数据库的Session,然后根据某个条件(比如用户ID什么的)读取。
    bombless
    bombless
    Dec 5, 2013❤️1
    11
    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
    jarlyyn
    Dec 5, 2013
    12
    ...不是应该include么?
    beaaar
    beaaar
    Dec 6, 2013
    13
    一定要给login.php去写session么?直接在reg.php写就行了,不过不知道楼主是不是有什么特殊的需求
    johnlui
    johnlui
    Dec 6, 2013 via Android
    14
    curl……
    看起来像是正在入门而且还不好好看教程……
    chenyg32
    chenyg32
    OP
    Dec 6, 2013
    15
    @johnlui 你怎么知道!!我确实入门不到5天……
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4994 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 46ms · UTC 07:14 · PVG 15:14 · LAX 23:14 · JFK 02:14
    ♥ Do have faith in what you're doing.