清除会话的最佳方式

时间:2014-07-15 17:01:47

标签: java web struts2

在我的退出操作中,我想要使会话无效/清除,我想知道这三种方法之间有什么区别,哪一方面更好:

-> ActionContext.getContext().getSession().clear();
-> getHttpServletRequest().getSession().invalidate()//servlet api
-> ((org.apache.struts2.dispatcher.SessionMap) session).invalidate(); //Struts 2 SessionAware interface

此外,struts 2"动作会话&#34>之间是否有任何区别?对象和servlet http会话对象?

3 个答案:

答案 0 :(得分:3)

最后一个问题:是的,正如文档所示。

SessionMap是一个实现Map接口的瘦外观,允许直接访问某些底层实现(例如invalidate)。

第一个问题:在最后两个之间,第一个问题略有不同。

clear只删除条目,IIRC它实际上使会话无效。我倾向于SessionMap.invalidate(),因为我试图避免直接与servlet规范绑定,但在这种情况下我不认为它是一个大问题,特别是因为它只是可能的在少数地方召集,例如退出。

答案 1 :(得分:2)

SessionMap#invalidate()如果与HttpSession#invalidate()相关联,则会调用HttpSession并清除内部地图并删除会话关联,因此我会使用它。

api独立性唯一的另一个区别似乎是SessionMap为所有会话条目提供了entrySet()方法。条目本身是从关联的HttpSession

中提取的

SessionMap#clear()只会从关联的HttpSession中移除所有属性,但不会使该会话无效。

有关详细信息,请查看SessionMap source

答案 2 :(得分:0)

使用此代码可获得更好的结果

# Import Library
import random
import pandas as pd
from bokeh.core.properties import value
from bokeh.io import show, export_png, output_notebook
from bokeh.plotting import figure, output_file
from bokeh.models import ColumnDataSource, Legend, HoverTool, layouts, CustomJS, Select, Circle, RangeTool
from bokeh.layouts import column
from datetime import date
output_notebook() # Render inline in a Jupyter Notebook


# Create Line Chart
def create_line_chart_bokeh():

    # Set data
    dates = ['24-11-2017', '28-11-2017', '29-11-2017',
            '23-03-2018', '27-03-2018', '12-08-2018']
    dates = list(map(lambda i: pd.Timestamp(i), dates))
    values = [random.randrange(101) for _ in range(len(dates))]
    source = ColumnDataSource(data=dict(date=dates, close=values))

    # Set plot
    p = figure(plot_height=300, plot_width=800, tools="xpan", toolbar_location="right",
               x_axis_type="datetime", x_axis_location="above",
               background_fill_color="white", x_range=(dates[0], dates[int(len(dates)-1)]), title='Test Line Chart')

    # Set Line and Circle colours
    line_colour = '#59819a'
    circle_colour = '#ef5b45'
    lineSource = {'date': [], 'close': []}
    date, close = [], []
    for i in range(len(dates)):
        try:
            diff = dates[i+1] - dates[i]
            if diff.days < 30:
                date.extend([dates[i], dates[i+1]])
                close.extend([values[i], values[i+1]])
            else:
                lineSource['date'].append(date)
                lineSource['close'].append(close)
                date, close = [], []
        except IndexError:
            pass
    lines = p.multi_line(xs='date', ys='close', source=ColumnDataSource(lineSource), color=line_colour)

    circles = p.circle('date', 'close', source=source, color=circle_colour, size=4)
    p.yaxis.axis_label = 'Scores' # set y axis label

    hoverCircles = HoverTool(renderers=[circles], tooltips=[("Average Score", "@close")])
    p.add_tools(hoverCircles)
    hoverLines = HoverTool(renderers=[lines], tooltips=[("Average Score", "$y")])
    p.add_tools(hoverLines)

    # Set Time Selection Box
    select = figure(title="Drag the middle and edges of the selection box to change the range above",
                    plot_height=130, plot_width=800, y_range=p.y_range,
                    x_axis_type="datetime", y_axis_type=None,
                    tools="", toolbar_location=None, background_fill_color="#efefef")

    range_tool = RangeTool(x_range=p.x_range)
    range_tool.overlay.fill_color = 'navy'
    range_tool.overlay.fill_alpha = 0.2

    select.line('date', 'close', source=source, color=line_colour)
    select.ygrid.grid_line_color = None
    select.add_tools(range_tool)
    select.toolbar.active_multi = range_tool

    # Show the result
    show(column(p, select))

    return None


# Call Function
create_line_chart_bokeh()