浏览器没有保存cookie-session

来源:13-4 sentry 集成到django rest framework中-2

天才在左_我在右

2021-06-09

环境:

Django==2.2.19,uwsgi,Nginx,vue,Goole 90.x centos7, 内网

问题描述:

本地运行时和vue联调,登录可以,访问个人中心也可以,所有接口访问都是ok的,后端能获取到用户的登录信息。
当我把程序并部署到服务器上时,可以登录,但是所有接口都无法访问,因为后端获取不到 用户的登录信息,所有请求都被跳转到登录页面;

相关代码

:验证登录代码

def login_required_json(view_func):
    """
    判断用户是否登录的装饰器,并返回json
    :param view_func: 被装饰的视图函数
    :return: json、view_func
    """

    @wraps(view_func)
    def wrapper(request, *args, **kwargs):
        # 如果用户未登录,返回json数据
        if request.user.is_authenticated is False:
            logger.error(
                f"这个接口被请求时:{request.path},查到没有登录状态: {usip(request)}----{request.COOKIES.get('sessionid', None)}")
            return JsonResponse({'code': "504", 'msg': '用户未登录'})
        else:
            # 如果用户登录,进入到view_func中
            return view_func(request, *args, **kwargs)

    return wrapper


class LoginRequiredMixin(object):
    """验证用户是否登陆并返回json的扩展类"""

    @classmethod
    def as_view(cls, **initkwargs):
        view = super().as_view(**initkwargs)
        return login_required_json(view)
    # pass

settings-session-cookie的设置:

# SESSION_COOKIE_SECURE = True
SESSION_COOKIE_SAMESITE = None
SESSION_COOKIE_HTTPONLY = None  # 是否HttpOnly在会话 cookie 上使用标志 如果设置为 True,客户端 JavaScript 将无法访问会话 cookie。
# SESSION_COOKIE_DOMAIN = "zhiliao.com"
SESSION_ENGINE = "django.contrib.sessions.backends.cache"  # 用于会话 cookie 的域
# SESSION_CACHE_ALIAS = "session"
SESSION_COOKIE_AGE = 60 * 60  # 以秒为单位
SESSION_SAVE_EVERY_REQUEST = False  # 是否每次请求都保存Session,默认修改之后才保存(默认)
SESSION_EXPIRE_AT_BROWSER_CLOSE = False  # 是否关闭浏览器使得Session过期(默认)

Nginx 代理 部分配置:

    server {
        listen       80;
        server_name  api.cicada.com;
        location / {       
            include             uwsgi_params;
            uwsgi_pass          127.0.0.1:8101;
        }
    }

    server {
        listen       80;
        server_name  admin.cicada.com;
        location / {
            root   /home/cicada/admin;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

这是部署在服务器的 cookie中没有保存sessionid
图片描述

这个是个本地运行的;cookie中就有sessionid
图片描述

求解

导致这种问题的原因是不是跨域?如果是怎么优化?
导致这种问题的原因是不是Nginx代理问题,前端url 与后端 url 不同导致的?如果是 有没有具体的配置方案或者代码demo?

案例

https://blog.csdn.net/weixin_42681866/article/details/104786293
这个博客案例与我的很相似,但是解决不了。

写回答

1回答

bobby

2021-06-11

课程是前后端分离的,保存token到cookie中是由前端自己写入的,所以你需要通过f12看看运行的时候是否登陆的接口返回了token,如果返回了没有写入到cookie中那么你需要看看console中是否有报错

0
4
天才在左_我在右
回复
bobby
了解!
2021-06-15
共4条回复

Python前后端分离开发Vue+Django REST framework实战

Django REST framework课程视频,RESTFul API前后端分离开发

2872 学习 · 2457 问题

查看课程