2016-07-11 4 views
2

Я новичок в флеш-каркасе и играю с ним, чтобы узнать его лучше. Я следую this учебным пособиям на моем пути.session.pop() не очищает файлы cookie

В соответствии с User Authentication учебник в серии, я застрял с ниже:

В учебнике, когда пользователь выходит из системы, нажав /logout маршрут, то первое, что случается:

session.pop('logged_in', None) 

Теперь, согласно видео, упомянутому выше, момент, когда пользователь попадает на маршрут /logout, cookie также удаляется из браузера.

Сейчас 2 вопрос здесь:

  1. В моем случае, с точно такими же настройками, что и учебник, хотя сессия может быть получение недействительного с конца сервера, куки не удаляются/изменены в любом путь от браузера после того, как маршрут /logout попал. Что-то не так, что я делаю?
  2. session.pop(...) => как/почему именно он удалит что-то из передней части браузера. Он может управлять вещами только на сервере, не так ли?

Для справки ниже мой код (взято из самого учебника)

# import the Flask class from the flask module 
from flask import Flask, render_template, redirect, url_for, request, session, flash 


# create the application object 
app = Flask(__name__) 

app.secret_key = 'my precious' 


# use decorators to link the function to a url 
@app.route('/') 
def home(): 
    return "Hello, World!" # return a string 
    #return render_template(index.html) 


@app.route('/welcome') 
def welcome(): 
    return render_template('welcome.html') # render a template 


# route for handling the login page logic 
@app.route('/login', methods=['GET', 'POST']) 
def login(): 
    error = None 
    if request.method == 'POST': 
     if request.form['username'] != 'admin' or request.form['password'] != 'admin': 
      error = 'Invalid Credentials. Please try again.' 
     else: 
      session['logged_in'] = True 
      flash('You were just logged in') 
      return redirect(url_for('home')) 
    return render_template('login.html', error=error) 


@app.route('/logout') 
def logout(): 
    session.pop('logged_in', None) 
    flash('You were just logged out') 
    return redirect(url_for('welcome')) 


# start the server with the 'run()' method 
if __name__ == '__main__': 
    app.run(debug=True) 
+0

я повторить то же самое замечание. Сеанс остался в браузере, несмотря на то, что приложение backend flask уже вытолкнуло его. Поэтому я думаю, что флэнд-бэкенд не может напрямую удалить сеанс в браузере. Мое лучшее предположение, возможно, есть тайм-аут, который нужно указать в сеансе? – ifelsemonkey

ответ

1
  1. Прежде всего сеанса и печенья не то же самое. Сессия больше похожа на уникальный идентификатор, размещенный в вашем браузере, и что-то вроде ключа для словаря для вашего бэкэнд. Поэтому большую часть времени, когда вы меняете сеанс (не идентификатор сеанса), вы просто изменяете бэкэнд-часть (добавляете или удаляете значения в базовом словаре этим ключом). Не cookie браузера.
  2. Вы все поняли. Когда вы выходите на «сеанс» с сервера сеанса, помните, что этот браузер больше не будет logged_in.

Так что cookie используется здесь только для идентификации браузера клиента. Вот и все.

+0

Я понимаю, что файлы cookie и сеансы разные. Но IMHO, в нашем случае выше, кажется, что cookie - это cookie сеанса, помимо идентификации браузера. Но то, что меня озадачивает, - это то, как в видео происходит удаление cookie с помощью session.pop()? Вы думаете, что я или автор видео (маловероятно) чего-то не хватает? – qre0ct

1

Вы можете установить время истечения куки 0, это сделает его недействительным

@app.route('/logout') 
def logout(): 
    session.pop('token', None) 
    message = 'You were logged out' 
    resp = app.make_response(render_template('login.html', message=message)) 
    resp.set_cookie('token', expires=0) 
    return resp   
+0

, что имеет смысл, и я понимаю, что если я установил время истечения срока действия для файла cookie, это не будет действовать после истечения срока его действия. Однако, что меня озадачивает, так это то, как в видео происходит удаление cookie с помощью session.pop()? Кажется, что-то просто не подходит! – qre0ct

+1

Если вы копаете больше в флеш-код, словарь сеанса связи используется для составления конечного объекта ответа HTTP. удаление logged_in из словаря сеанса, наконец, приводит к удалению файла cookie – Sugam

Смежные вопросы