Cookie和Session

一,Session:含义:有始有终的一系列动作\消息

1, 隐含了“面向连接”和“保持状态”两种含义

2, 一种用来在客户端与服务器之间保持状态的解决方案

3, 也指这种解决方案的存储结构“把××保存在session里”

二,http协议本来是无状态的,所以引进了cookiesession机制来保持连接状态

cookiesession机制之间的区别与联系:

cookie机制采用的是在客户端保持状态的方法

session机制采用的是在服务器端保持状态的方案,由于在服务器端保  持状态的同时必须要求客户端提供一个标识,

三,关于cookie机制

Cookie的使用是由浏览器按照一定的原则在后台自动发送给服务器的,浏览器会检查

所有存储的cookie,如果某个cookie所声明的作用范围大于等于将要请求的资源所在的位置,则把该cookie附在请求资源的http请求头上发送给服务器。

存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而保存在内存里的cookie,不同的浏览器有不同的处理方式,对于IE,在一个打开的窗口上按CTRLN(从文件菜单)打开的窗口可以与原窗口共享cookie,而使用其他方式新开的IE进程则不能共享已经打开的窗口的内存cookie

Cookie的内容包括:名字,值,过期时间,路径和域

四,关于session的机制

   当程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个请求是否含了一个session标识(session id),如果有,则说明以前为该客户创建了一个session,服务器就按照session id把这个session检索出来用,一般一个cookie的名字就是类似于session ID,如果cookie被禁止的时候(cookie可以被人为的禁止),经常使用重写URL的方式,把session ID附加在URL路径后面,为了在整个交互过程中始终保持状态,就必须在每个客户端可能请求的路径后面都包含这个session id

    人们以为:“把浏览器关闭了,session就小时了”其实不对,除非程序通知服务器删除一个session,否则服务器会一直保留,而程序一般都是在用户作log off的时候发个指令去删除session。人们之所以会产生这种错觉,是因为大部分session会采用cookie来保存session,而关闭浏览器后这个session就消失了,如果服务器设置的cookie被保存到硬盘上,或者使用某种手段改写浏览器发出的http请求头,把原来的session id发送给服务器,则再次打开浏览器,其实是可以再次找到之前的session id的。所以设置失效时间可以起到一定的保护作用。

五,关于session的一些问题

1, session何时被创建:不是在客户端访问时就被创建,而是在服务器端调用httpservletRequest.getSession(true)时才被创建。

 

2, session何时被删除: A,程序调用httpSession.invalidate(),B距离上一次收到客户端发送的session id时间间隔超过了session的超时设置C, 服务器进程被停止(非持久session

3, 如何做到关闭浏览器同时关闭session 严格说做不到,可以让所有的客户端页面使用window.onclose来监视浏览器的关闭东西,然后向服务器发送一个请求来删除session,但是对于浏览器崩溃或者强行杀死进程时仍然无能为力。

<think>好的,我现在需要帮助用户理解在CentOS 7.9中命令后面跟着的“2>&1”是什么意思。首先,我得回忆一下自己对Linux重定向的理解。用户可能是在编写脚本或者执行命令时遇到了输出处理的问题,需要知道如何将错误信息重定向到某个地方。 用户之前询问过PHP获取系统账户权限的问题,现在转向了CentOS命令,可能是在学习服务器管理或脚本编写。需要确保我的回答清晰易懂,适合不同层次的理解。 首先,解释“2>&1”的基本含义。在Linux中,文件描述符1是标准输出(stdout),2是标准错误(stderr)。这个符号的作用是将标准错误重定向到标准输出的位置。可能需要详细说明每个数字代表什么,以及&符号的作用,否则用户可能不理解为什么是2>&1而不是其他写法。 然后,用户可能想知道使用场景。比如,当需要将正常输出和错误信息都保存到文件时,或者通过管道传递给其他命令处理。这时候,可以举例说明,比如“command > output.log 2>&1”或者“command 2>&1 | grep 'error'”,这样用户能直观看到应用方式。 还要注意顺序问题,因为在重定向时顺序很重要。如果用户写成“2>&1 > file”,可能达不到预期效果,需要指出正确的顺序应该是先重定向标准输出到文件,再把标准错误指向标准输出的位置,也就是“> file 2>&1”。或者更简洁的写法“&> file”,特别是在bash中,这样可能更简单。 可能用户在使用时遇到了权限问题,或者脚本中的错误信息没有正确记录,这时候解释这个符号的意义可以帮助他们调试。另外,用户可能会混淆>&和2>&1的区别,需要澄清这些符号的不同用法。 还要考虑到用户可能对Linux基础不太熟悉,所以需要避免使用过多术语,用通俗的语言解释。比如,把标准输出和标准错误比喻成两种不同的水流,重定向就是把它们引导到同一个地方或者不同的地方。 最后,总结使用场景和注意事项,确保用户知道如何正确使用这个符号,以及常见的错误用法,帮助他们避免踩坑。可能还需要提到一些相关的命令或符号,比如1>和2>的区别,或者>/dev/null来丢弃输出,这样用户能有一个全面的了解。</think>在 CentOS 7.9(及其他 Linux 系统)中,命令末尾的 `2>&1` 是一种 **输出重定向操作**,用于控制命令的 **标准错误(stderr)** 和 **标准输出(stdout)** 的流向。以下是详细解释: --- ### **基础概念** - **文件描述符(File Descriptor)** - `0`:标准输入(stdin,键盘输入) - `1`:标准输出(stdout,正常输出内容) - `2`:标准错误(stderr,错误信息输出) - **符号含义** - `>`:重定向符号(覆盖写入文件) - `&`:表示“引用”文件描述符 - `2>&1`:将标准错误(文件描述符2)合并到标准输出(文件描述符1)的流向中。 --- ### **常见用法及示例** #### 1. **将标准输出和错误同时写入文件** ```bash command > output.log 2>&1 ``` - **含义**: 1. `> output.log` 先将标准输出(stdout)重定向到 `output.log` 文件。 2. `2>&1` 再将标准错误(stderr)合并到标准输出的流向,即也写入 `output.log`。 - **结果**:命令的正常输出和错误信息均保存到 `output.log`。 #### 2. **丢弃所有输出(静默执行)** ```bash command > /dev/null 2>&1 ``` - **含义**:将标准输出和错误全部重定向到“黑洞”设备 `/dev/null`,不显示任何输出。 #### 3. **通过管道传递输出和错误** ```bash command 2>&1 | grep "error" ``` - **含义**:将标准错误合并到标准输出后,通过管道 `|` 传递给 `grep` 命令过滤包含 "error" 的行。 --- ### **关键注意事项** 1. **顺序敏感** - `command > file 2>&1`(正确):先重定向标准输出到文件,再将标准错误合并到标准输出。 - `command 2>&1 > file`(错误):错误信息会输出到终端,仅标准输出写入文件。 2. **简写形式** 在 Bash 中可直接用 `&>` 替代: ```bash command &> output.log # 等同于 > output.log 2>&1 ``` 3. **日志分离场景** 若需将标准输出和错误分开保存: ```bash command > stdout.log 2> stderr.log ``` --- ### **典型应用场景** 1. **脚本日志记录** 将脚本执行的所有输出(含错误)记录到日志文件: ```bash ./script.sh > /var/log/script.log 2>&1 ``` 2. **后台任务静默执行** 启动后台任务且不显示任何输出: ```bash nohup command > /dev/null 2>&1 & ``` 3. **调试错误信息** 快速筛选命令执行中的错误: ```bash command 2>&1 | grep -i "fail" ``` --- ### **验证示例** 执行一个包含错误的命令: ```bash ls /nonexistent_dir > output.log 2>&1 ``` - **结果**: - 终端无输出。 - 查看 `output.log` 文件会包含错误信息:`ls: cannot access /nonexistent_dir: No such file or directory`。 --- ### **总结** - `2>&1` 的本质是 **将标准错误合并到标准输出的流向**。 - 结合 `>` 或 `>>` 可灵活控制输出目标(文件、终端或其他命令)。 - 在脚本编写、日志管理、后台任务等场景中广泛使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值