精华内容
下载资源
问答
  • VC6.064位Windows7下调试的时候,直接结束调试时,程序无法退出,这个插件可以帮助win764位调试时直接结束调试退出程序。
  • 默认情况下,session对象关闭浏览器后并不是立刻被销毁,因此,为了考虑系统的安全性,用户退出时,需要即刻清除session对象,防止他人盗用session对象中的信息。清除session信息主要有两种方式,一种是遍历的...

    在默认情况下,session对象在关闭浏览器后并不是立刻被销毁,因此,为了考虑系统的安全性,在用户退出时,需要即刻清除session对象,防止他人盗用session对象中的信息。清除session信息主要有两种方式,一种是遍历的清除session中的所有属性,另一种是直接设置session失效,两种方式都要在退出的接口中实现,附代码:

    		   HttpSession session = request.getSession();
               /* 清除session的方案一 */
               Enumeration attributeNames = request.getSession().getAttributeNames();
               while (attributeNames.hasMoreElements()) {
                   session.removeAttribute(attributeNames.nextElement().toString());
               }
               /* 清除session的方案二 */
               session.invalidate();
    

    到这里好像结束了,因为session已经被正确的清除。但是设想一种场景,当用户点击退出的时候,这里记录请求为request1,调用退出接口并清除了相关的session,但是如果用户此刻复制了目标路径,新建了一个窗口,回车进入,此时其实是另一个请求request2了,就是说上一步清除的session信息其实是request1,而request2请求将能正常登入系统。那么应该怎么做呢?这里有两种方案,一是利用Redis,二是采用ThreadLocal

    Redis解决方案

    思路:在Redis为每个用户登录的用户名维护一条记录,一定要设置过期时间,一般一个小时。用户每次登录的时候,通过通过拦截器从缓存中查询用户名,如果没有命中,则认为用户未登录过或者登录信息已经失效,引导用户重新登录,用户正确登录之后通过setnx()方法将用户名插入缓存。用户每次点击退出时,清除本次请求的session信息,并同时将缓存中记录用户名的key同步的删除。

    Tips:
    setnx()也被经常用作分布式锁,具体可参看博客:
    【分布式锁】并发场景下的数据插入

    接下来附上利用Redis维护、删除用户登录信息的部分代码:

    	/* 缓存里记录用户名的key */
    	private static final String USERNAME = "username_";
        public ModelAndView login(HttpServletRequest request,
                                  @RequestParam(value = "username", required = true) String username,
                                  @RequestParam(value = "password", required = true) String password) {
            ……
            String key = USERNAME + username;
            /* 把用户信息设置进缓存并设置过期时间 */
            redisCacheService.setnx(key, username);
            redisCacheService.expire(key, 60 * 60);
            ……
        }
    
        public ModelAndView logout(HttpServletRequest request, @ApiParam("用户名") @RequestParam(value = "username", required = true) String username) {
            ……
            HttpSession session = request.getSession();
            session.invalidate();
            /* 清除本地缓存 */
            String key = USERNAME + username;
            redisCacheService.remove(key);
            ……
        }
        
    

    然后在登录拦截器中设置每次从request中获取到用户信息之后,再和Redis中的去比较,如果缓存中没有命中,则视本次请求中的用户登录信息已经过期,需要跳转到登录页面。

    import org.apache.commons.lang3.StringUtils;
    public class LoginInterceptor implements HandlerInterceptor {
    	/* 缓存里记录用户名的key */
        private static final String USERNAME = "username_";
    
    	 @Override
        public boolean preHandle(HttpServletRequest servletRequest, HttpServletResponse servletResponse, Object o) throws Exception {
            servletRequest.setCharacterEncoding("UTF-8");
            servletResponse.setContentType("application/json;charset=utf-8");
            ServletOutputStream outputStream = servletResponse.getOutputStream();
    
            HttpSession session = servletRequest.getSession();
            Object userNameObject = session.getAttribute("userName");
            String userName = userNameObject != null ? userNameObject.toString() : null;
            if (userName == null) {
                servletResponse.setStatus(HttpServletResponse.SC_OK);
                String res="登录失败,未获取到用户登录信息~";
                outputStream.write(JsonUtils.toJson(res).getBytes("UTF-8"));
                return false;
            }
            /* 和本地缓存中的比较 */
            String key = USERNAME + userName;
            String value = (String) redisCacheService.get(key, String.class, new CacheCallable() {
                @Override
                public Object getCacheValue() throws Exception {
                    return null;
                }
            });
            /* 若未命中缓存,说明用户登录信息已失效,引导用户重新登录 */
            if (StringUtils.isBlank(value)) {
                return false;
            }
            return true;
        }
    }
    

    ThreadLocal解决方案

    待补充。

    参考阅读
    如何解决每次向后台发起请求时判断用户是否处于登录状态?
    展开全文
  • 只要配了这个sessionManager就在退出登录的时候报There is no session with id ![图片说明](https://img-ask.csdn.net/upload/201711/03/1509675138_91770.png) 不配置就能正常退出 框架是用的ssm
  • linux c开发: 程序退出时进行处理

    千次阅读 2017-08-28 16:40:47
    时候,希望程序退出时能进行一些处理,比如保存状态,释放一些资源。c语言开发的linux程序,有可能正常退出(exit),有可能异常crash,而异常crash可能是响应了某信号的默认处理。这里总结一下这些情况,如何获取一...

    有时候,希望程序退出时能进行一些处理,比如保存状态,释放一些资源。c语言开发的linux程序,有可能正常退出(exit),有可能异常crash,而异常crash可能是响应了某信号的默认处理。这里总结一下这些情况,如何获取一个统一的退出处理的点,说白了就是写一个回调函数,让他在程序正常或异常退出时调用。

    • 先看正常退出,即调用exit或者main函数return亦或最后一个线程正常退出时,如何捕获退出事件。
      使用atexit函数。头文件:#include<stdlib.h>, 函数原型:void atexit(void (*func)(void));
      atexit可以调用多次,注册多个回调函数,在进程退出时调用,同一个函数可以被注册多次。使用示例:
    void server_on_exit(void)
    {
        //do something when process exits
    }
    int main(int argc, char *argv[])
    {
        atexit(server_on_exit);
    
        return 0;
    }
    • 再看异常退出,如abort,响应某些signal的默认处理是异常退出,还有直接kill进程。
      处理方法是使用signal函数,注册自己的回调函数,而避免系统默认的回调,系统默认的回调可能就是直接crash掉程序。使用例子:
    #include <signal.h>
    void signal_crash_handler(int sig)
    {
        server_backtrace(sig);
        exit(-1);
    }
    
    void signal_exit_handler(int sig)
    {
        exit(0);
    }
    
    int main(int argc, char *argv[])
    {
        atexit(server_on_exit);
        signal(SIGTERM, signal_exit_handler);
        signal(SIGINT, signal_exit_handler);
    
        // ignore SIGPIPE
        signal(SIGPIPE, SIG_IGN);
    
        signal(SIGBUS, signal_crash_handler);     // 总线错误
        signal(SIGSEGV, signal_crash_handler);    // SIGSEGV,非法内存访问
        signal(SIGFPE, signal_crash_handler);       // SIGFPE,数学相关的异常,如被0除,浮点溢出,等等
        signal(SIGABRT, signal_crash_handler);     // SIGABRT,由调用abort函数产生,进程非正常退出
    
        return 0;
    }

    这个例子里面其实是将异常退出处理和正常退出处理结合起来了。对于SIGTERM(即kill进程)和SIGINT(即ctrl-c结束前台进程),我们当做是正常退出,在其信号处理函数里面,直接调用了exit(0),而exit(0)又会被server_on_exit捕获到。对于异常退出也是类似,只是调用了exit(-1)表示是异常的。同时异常退出我们会打印出当前的进程堆栈信息,server_backtrace的实现下一篇再说。另外注意的是SIGKILL信号是无法捕获的。而调用abort导致的退出,也是通过SIGABRT信号捕获到进行处理了。其他几种异常退出的信号也是比较常见,一并捕获到进行处理。这样对于异常退出,我们即可统一的log堆栈信息,又可直接继续正常退出时的处理流程了。

    展开全文
  • ssh登录ssh 192.168.223.2 ssh直接输入ip地址 之后会提示你输入用户名称和... ssh -p port laok@192.168.223.2 port是服务器端设置的端口号,有时候在服务器端,设置了端口号就需要输入对应的端口号。 对linux进行

    ssh登录

    ssh 192.168.223.2   ssh直接输入ip地址  之后会提示你输入用户名称和密码
    ssh laok@192.168.223.2  输入了用户名  之后不会再提示你输入用户名称,只需要输入密码就能进行登录。
    ssh -p port laok@192.168.223.2  port是服务器端设置的端口号,有时候在服务器端,设置了端口号就需要输入对应的端口号。
    

    在对linux进行关机的时候,要提前对系统信息进行保存。

    sync   将数据由内存同步到硬盘中
    shutdown -h now  立即关机 后面还可以设置时间或者哪一时刻来关机
    shutdown -h 20:00 将在今天八点的时候关机
    shutdown -h +10  10分钟后关机
    shutdown -r now  立即重启
    shutdown -r 用于设置重启的操作
    halt 关闭系统 等同于shutdown -h now 和poweroff
    
    exit是退出登录  只是退出当前登录的用户而已,而前面的操作是需要在退出之前进行的。
    
    展开全文
  • 关于go函数退出后子协程的退出问题 该问题来源于自己在读fabric源码时,看到的一个测试代码,一个函数中启用协程,然后该函数退出了,由于平常没有这样处理过,以及受原有c++函数域的影响,认为函数退出,子协程...

    关于go在函数退出后子协程的退出问题

    该问题来源于自己在读fabric源码时,看到的一个测试代码,在一个函数中启用协程,然后该函数退出了,由于平常没有这样处理过,以及受原有c++函数域的影响,认为函数退出,子协程应该也退出了呀。
    这其实是自己对go协程的理解不到位引起的,go的协程作用域不是在某个函数中的,当然,如果那个函数是main函数,就符合要求了。

    该代码为solo算法的测试代码:

    func goWithWait(target func()) *waitableGo {
    	wg := &waitableGo{
    		done: make(chan struct{}),
    	}
    	go func() {
    		target()//该协程会阻塞在这
    		close(wg.done)//用来对外通知
    	}()
    	//外边结束,里边还不结束吗?
    	return wg
    }
    // This test checks that if consenter is halted before a timer fires, nothing is actually written.
    func TestHaltBeforeTimeout(t *testing.T) {
    	batchTimeout, _ := time.ParseDuration("1ms")
    	//support的构造还不清楚
    	support := &mockmultichannel.ConsenterSupport{
    		Blocks:          make(chan *cb.Block),
    		BlockCutterVal:  mockblockcutter.NewReceiver(),
    		SharedConfigVal: &mockconfig.Orderer{BatchTimeoutVal: batchTimeout},
    	}
    	defer close(support.BlockCutterVal.Block)
    	bs := newChain(support)
    	//bs.main是solo算法的启动函数,是个死循环,处理函数
    	wg := goWithWait(bs.main)
    	defer bs.Halt()//中止
    	syncQueueMessage(testMessage, bs, support.BlockCutterVal)
    	bs.Halt()
    	select {
    	case <-support.Blocks:
    		t.Fatalf("Expected no invocations of Append")
    	case <-wg.done:
    	}
    }
    

    遇到该问题后,我写了几个测试:
    单纯的函数退出,是不会影响协程的

    package main
    
    import "fmt"
    
    var ch chan int
    
    func test() int {
    	ch = make(chan int)
    	go func() {
    		for {
    			fmt.Println(<-ch)
    			fmt.Println("hello")
    		}
    		fmt.Println("aaaa")
    	}()
    	//不阻塞,那go func()不会异常退出吗?
    	//协程并不是函数,不会因为这个函数的退出而退出
    	//test()启动一个deadloop子协程,这个会在主协程main结束后被强制退出
    	return 0
    }
    func main() {
    	c := test()
    	ch <- 10
    	fmt.Println("c", c)
    }
    

    我经常在main里边直接写协程的测试demo,main退出会结束主协程,之后会强制结束子协程,一般不会遇到上述在普通函数退出的问题,也没仔细思考,所以分析源码时有点困惑。


    子协程启动子协程,父协程的退出,并没有影响到子协程

    liudeMacBook-Pro:~ liu$ cat tmp.go 
    package main
    import (
    	"fmt"
    	"time"
    )
    func test() {
    	go func() { //父协程
    		defer func() {
    			fmt.Println("exit dad")
    		}()
    		go func() { //子协程
    			defer func() {
    				fmt.Println("exit kid")
    			}()
    		}()
    	}()
    }
    func main() {
    	test()
    	time.Sleep(time.Second)
    }
    liudeMacBook-Pro:~ liu$ go run tmp.go 
    exit dad
    exit kid
    
    展开全文
  • 开始的时候退出到登录界面按返回键无法退出程序,而是返回到上一个Activity,网上说是没有finish掉上一个Activity,确实是这样,遇事只要finish掉就好了。  以MainActivity为例子,MainActivity将其初始化: ...
  • 文章目录Windows上双击运行Python程序不会自动退出的方法前言将python.exe添加到环境变量中一个Python程序例子双击运行Python程序报错双击运行Windows Command让程序停一会程序出错时打印错误信息,不自动关闭窗口...
  • 时候,我们从一家企业离职,就需要退出这家企业的企业微信,应该怎么退出呢?退出之后,该企业微信的聊天记录还吗?自己的个人信息会不会一直存在?今天就跟着企业微信服务商艾客scrm,一起来解决这些问题吧。 ...
  • session用户退出时候的清空问题

    千次阅读 2014-12-04 18:14:20
    HttpSession session = request.getSession(); Enumeration attributeNames = session.getAttributeNames(); while(attributeNames.hasMoreElements()){ String attrName = attributeNames.nextElement().to
  • 线程函数退出时候crash

    千次阅读 2016-05-06 21:29:21
    线程函数退出之前执行 pthread_exit() 原因分析 pthread_exit()退出当前线程,不退出子线程。 return 退出当前的线程,以及子线程。如果有子线程没有资源释放,就可能导致crash. pthread_create()
  • python退出命令-python退出指令

    千次阅读 2020-11-01 13:10:34
    cmd中如何退出python (1)命令行上输入exit() (2)命令行上输入quit()好像还有一种方法是命令行上输入ctrl+z,再按回车,但是我一直成功不了,? 有知道出现什么问题的,麻烦给我说一下...要退出python命令行,我...
  • 关于app退出的问题,完美退出方式

    万次阅读 2017-06-20 09:43:43
    比如说我们首页的时候需要一个双击退出的方法,点击第一次手机的返回键时提示:“再点一次退出应用”。之类的话语,我们可以这样做,对重写onKeyDown方法,当他第一次点击的时候提示文字,给一个几秒的间隔,这...
  • python退出程序-python退出程序

    千次阅读 2020-11-01 13:00:24
    python退出程序的方式有两种:os._exit(),sys.exit() 1)os._exit() 直接退出 python程序,其后的代码也不会继续执行。 2)sys.exit() 引发一个 systemexit异常,若没有捕获这个异常,python解释器会直接退出; ...
  • 如何微信小程序里面退出小程序

    万次阅读 2017-09-22 11:40:11
    第一个要说的问题是 如何小程序里面退出小程序。 这个功能基本上都会用到,而文档里面没有找到如微信一样直接的api: WeixinJSBridge.call('closeWindow'); 于是我就各种上网搜,好的,结果告诉我小程序已经出了...
  • linux 退出

    千次阅读 2019-06-10 21:51:48
    linux家族中,vim编辑器是系统自带的文本编辑器,其功能强大自不必说了。 偶有小白,刚接触linux,要修改某个文本文件,不可能像WINDOWS那样操作,更有甚者,进入VI编辑器后,无法退出以致强抽关机,确是不得以...
  •  当你没有设置集合点的脚本运行场景时,用户退出是部分用户一直卡gradual exiting状态,且出现错误step download timeout (120 seconds) has expired 以上这两种情况都是一个原因导致的,就是这些卡run状态...
  • 详述如何退出 Vim 编辑器

    千次阅读 多人点赞 2017-06-03 08:27:32
    But,很多同学使用 Vim 进行文本编辑的时候却不知道如何退出 Vim 编辑器,这就有些尴尬啦!因此,本文中,详细列出如何 Vim 编辑器的方法,希望对大家有些帮助。首先,点击Esc键,Vim 进入命令模式。然
  • @Override  public boolean onKeyDown(int keyCode, KeyEvent event) {  // TODO Auto-generated method stub  if ((keyCode == KeyEvent.KEYCODE_BACK)&& wv.canGoBack()) {  wv.g
  • int* function(void) { int a[3] = {1,2,3}; return a; } int main() { int* b = function();...function()中定义的数组a[]是一个局部变量,a...但是,实际编译运行过程中,依然可以得到正确输出:1,这是为什么?
  • VI退出 退出VIM 适用新手

    万次阅读 多人点赞 2017-05-26 23:15:48
    今天看了篇文章,说10万人中就有1个人不知道怎么退出VIM,我第一次用的时候也不知道怎么退出。 一、退出方法如下: :q -- 退出(这是:quit的缩写) :q! -- 不保存退出(这是:quit!的缩写) :wq -- 写入文件...
  • 有的时候我们需要应用程序启动的时候执行一些资源初始化的工作,或者应用程序退出时候进行一些资源释放的工作,那么该如何做呢?这篇文章针对两个问题做一个汇总说明。 怎么应用程序启动时执行一些初始化...
  • Git :git bash 出现vim的时候怎么退出

    千次阅读 2017-10-22 21:59:08
    输入冒号和q退出
  • dos下登录退出mysq

    千次阅读 2017-06-11 12:47:32
    桌面左下角windows图标--搜索框内输入cmd,结果如图所示,点击cmd.exe,或者使用快捷键Windows键(键盘上有个Windows标志的按键)+R输入cmd后回车。(图略) 启动mysql数据库:出来的DOS命令窗口中输入 net ...
  • PostgreSQL - psql的使用与退出

    万次阅读 2018-08-01 21:44:42
    虽然pgAdmin操作起来会更加直观简单,但是restore和backup db的时候,效率和性能会比较低下,如果db过于庞大,还会导致pgAdmin内存溢出。 推荐使用psql来连接数据库进行备份和恢复db,同样大小的db,使用psql来r....
  • 某人玩游戏的时候输入密码 123456 后成功进入游戏(输错5次则被强行退出),要求用程序实现密码验证的过程。 提示: 使用 Sysytem.in 包装为字符流读取键盘输入。 BufferedReader 对字符流进行包装。调用 ...
  • 4.4手机上退出时候会闪烁一下。切换activity的时候切换动画修改一下就好了。 <!-- Customize your theme here. --> <item name="android:windowBackground">@color/mytransparent ...
  • 每个SpringApplication都会向JVM注册一个关闭钩子(hook),以确保ApplicationContext在退出时正常关闭。 可以使用所有标准的... 此外,如果bean希望调用SpringApplication.exit()时返回特定的退出代码,则bean可...
  • send 函数导致进程退出

    千次阅读 2015-12-23 17:41:14
    于是写了一个简单的webserver,用C写的,写完后反复测试,发现服务器进程会莫名其妙的退出,很是诧异,通过加打印反复测试,发现问题出现send函数上,可这是个函数出问题,我能怎办呀,愁死了。当然不可能是这个...
  • Android退出应用的方法总结

    千次阅读 2018-11-19 12:51:33
    java基础总结目录这是Android常见的几种退出应用的方法,此做一个总结,这几种方法各有利弊,可以自己去尝试一下。一、容器式二、任务栈式三、广播式四、 进程式五、 任务管理器六、 广播+singletask七、...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 903,678
精华内容 361,471
关键字:

在最好的时候退出