Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Question] 请教关于session有效期的问题 #78

Open
3dian opened this issue Mar 20, 2022 · 9 comments
Open

[Question] 请教关于session有效期的问题 #78

3dian opened this issue Mar 20, 2022 · 9 comments

Comments

@3dian
Copy link

3dian commented Mar 20, 2022

本小白对网络方面的知识了解的不够精,望老师帮忙解答下:
我们平常使用浏览器登陆微博网站,登陆一次以后,很长一段时间内都不需要再次登陆
但是使用本项目的时候,发现扫码登陆后微博保存的session,一天后就过期了,需要再次扫码登陆
请问这是什么原因呢?是否有办法能长久地保持session的有效期呢?

@CharlesPikachu
Copy link
Owner

仅猜测,不知道对错,可能session长时间没和服务器有交互所以被判定失效了,浏览器里你每天都会用那个session访问微博,所以有效期长。你可以自己实验验证一下。

@1273082756
Copy link

同问, 平常使用浏览器登陆微博网站,登陆一次以后,很长一段时间内都不需要再次登陆, 即便是清空了cookie, localstorage, 也能通过跳转passport.weibo.com进行自动登录, 这是什么原因

@1273082756
Copy link

貌似平时在浏览器上登录微博, 他的cookie也是24小时后过期, 不过过期后会跳转login.sina.com.cn进行自动授权, 然后会刷新掉过期的cookie, 达到一个自动登录的效果, 请问作者能加上这个逻辑吗

@3dian
Copy link
Author

3dian commented Mar 29, 2022

貌似平时在浏览器上登录微博, 他的cookie也是24小时后过期, 不过过期后会跳转login.sina.com.cn进行自动授权, 然后会刷新掉过期的cookie, 达到一个自动登录的效果, 请问作者能加上这个逻辑吗

可能是扫码登陆的cookie有效期比较短?我测试了用手机验证码24小时后不会过期

@1273082756
Copy link

貌似平时在浏览器上登录微博, 他的cookie也是24小时后过期, 不过过期后会跳转login.sina.com.cn进行自动授权, 然后会刷新掉过期的cookie, 达到一个自动登录的效果, 请问作者能加上这个逻辑吗

可能是扫码登陆的cookie有效期比较短?我测试了用手机验证码24小时后不会过期

在正常的浏览器环境内, 不管是哪种方式登录, 有效期都蛮长的(大概一周以上), 只不过每次重新打开浏览器 进入weibo.com. 会跳login授一次权, 然后xsrf-token和sub都会改变, 达到长期在线的一个目的, 但是DecryptLogin貌似只保留了相关的cookie, 并没有在每次启动模块的时候去走一遍跳login重新授一次权的动作, 所以有效期相比较于正常浏览器登录有效期短了许多(亲测最多24小时就会过期), 希望作者能够加上微博自动跳login重新授权的这样一个动作, 而不是保存一个上次授权后固定死的cookie在文件内.

@CharlesPikachu
Copy link
Owner

欢迎PR

@1273082756
Copy link

欢迎PR

大概逻辑我已经理清楚了, 目前正在测试, 等测试完后提一个PR

@1273082756
Copy link

重新登录需要传入第一次登录时获取的alf与alc两个参数, 然后relogin后会获得一个新的SUB, 这个SUB放在cookie内即可继续调用API


def reLogin(alf, alc):
    session = requests.session()
    userAgent = {
        'user-agent':
        'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like  Gecko) Chrome/99.0.4844.51 Safari/537.36 Edg/99.0.1150.36accept:text/html,   application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,   application/signed-exchange;v=b3;q=0.9'
    }
    def get(url, headers={}):
        if not headers.get('Cookie'):
            session.headers.update(
                {'Referer': 'https://login.sina.com.cn/sso/login.php'})
        return session.get(url=url,
                           headers=headers,
                           allow_redirects=False,
                           verify=False)

    session.trust_env = False
    headers = {'Cookie': f'ALF={alf};', }
    headers.update(userAgent)
    # 1.获取Location
    res = get(url='https://weibo.com/', headers=headers)
    location = res.headers['Location']
    if location.find('login.sina.com.cn/sso/login.php') == -1:
        print('[1]获取Location失败')
        return 1

    # 2.跳转location
    headers['Cookie'] = f'ALC={alc};'
    res = get(url=location, headers=headers)
    url = subString(r'\("(.*?)"\);', res.text)
    if len(url) == 0:
        print('[2]跳转location 未找到url')
        return 2
    SUB = subString(r'SUB=(.*?);', res.headers["Set-Cookie"])
    if len(SUB) == 0:
        print('[2]跳转location 未找到sub')
        return 3
    SUB = f"SUB={SUB[0]}; "

    # 3.获取crossdomain2地址
    url = subString(r'replace\(\"(.*?)\"', res.text)
    if len(url) == 0:
        print('[3]未找到crossdomain2地址', res.text)
        return 4
    url = url[0]

    # 4.获取passport.weibo.com/wbsso/login?ticket=
    res = get(url=url)
    url = subString(r'\[\"(.*?)\"', res.text)
    if len(url) == 0:
        print('[4]获取wbsso/login地址失败', res.text)
        return 5
    url = url[0].replace('\/', '/')

    # 5.跳转passport.weibo.com/wbsso/login?ticket=
    res = get(url=url)
    SUB = subString(r'SUB=(.*?);', res.headers['Set-Cookie'])
    if len(SUB) == 0:
        print('[5]获取SUB失败')
        return 6
    SUB = SUB[0]
    return SUB

@1273082756
Copy link

欢迎PR

很抱歉我的能力水平有限, 以及对作者的项目结构不是特别熟悉, 以至于我只能以这种方式将代码提交至项目, 希望作者能merge到相关模块内

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants