그러냐

webview 로그인 후 뒤로가기 / 웹페이지를 사용할 수 없음 / 리다이렉트 본문

android

webview 로그인 후 뒤로가기 / 웹페이지를 사용할 수 없음 / 리다이렉트

관절분리 2017. 3. 2. 15:14
반응형

http://blog.acronym.co.kr/549    리다이렉트일 경우







하이브리드앱 질문(jquery, php, phonegap)
글쓴이기술레벨커뮤니티레벨하이랭커날 짜13-01-20 14:54조 회6419
간편URLhttps://www.phpschool.com/link/qna_function/370638 복사

SyntaxHighlight로 보기

페이스북 앱이나 핀터레스트, path, 트위터 같은 앱들은 

한 번 로그인 하면 설정창에서 로그아웃 안하는 이상 계속 유지가 되잖아요.. 뒤로가기 버튼 누르면 앱이 꺼져버리고 

지금 그렇게 구현을 해볼려고 하는데 php로 한번 로그인 하면 로그아웃 안하는 이상 로그인 페이지로 못나가게 할 수 

없을까요? 로그인 후 본 페이지 들어와서 뒤로가기 버튼을 누르면 로그인화면으로 나가버려서요...
  • 답변채택율 100%
  • 추천 0
  • 비추천 0

전체댓글수 7

  • 기술레벨커뮤니티레벨thisgun 13-01-21 11:04 채택답변 질문자가 질문 해결에 도움이 되어 선택한 답변입니다.

    소스보기

  • 아이폰은 잘 모르구요... 안드로이드에서 제가 했던 방법입니다. 

    WebView webview; //웹뷰 선언 
    WebBackForwardList mWebBackForwardList = webview.copyBackForwardList(); //웹뷰의 히스토리 목록을 가져온다. 
    String historyUrl = mWebBackForwardList.getItemAtIndex(mWebBackForwardList.getCurrentIndex()-1).getUrl(); //웹뷰의 뒤로가기 url을 구한다. 

        private static final Set<String> VALUES = new HashSet<String>(Arrays.asList( 
            new String[] { 
            "/member/logout.php", 
            "/member/login.php", 
            "/member/login_process.php", 
            "/local/request.php" 
            } 
        )); //뒤로가기 막기 url을 배열변수에 넣는다. 

              boolean bool_value = VALUES.contains(historyUrl); //배열변수에 해당값이 들어있으면 true, false 
          if(bool_value){ 
          webview.loadUrl("http://도메인네임.com/"); 
          } else { 
          webview.goBack(); //뒤로가기 
          } 

    위의 과정은 안드로이드에서 KeyEvent.KEYCODE_BACK 이벤트가 일어났을때 처리한거구요. 시작페이지에서 뒤로가기 누르면 앱을 종료 할수 있도록 처리도 해 놓아야 합니다. 그리고 웹에서도 kionpark님이 답변한 것처럼 처리도 해 놓아야 합니다. 

    아래는 제가 안드로이드 뒤로가기 할때 처리한 소스입니다. 
      
        public boolean onKeyDown(int keyCode, KeyEvent event) {      
        if (keyCode == KeyEvent.KEYCODE_BACK){ 
        
            String current_Url = webview.getUrl(); 
            boolean bool_current_val = current_Url.equalsIgnoreCase("http://도메인네임.com/"); 
            //Log.e("state1", current_Url+""); 
            //Log.e("state1", bool_current_val+""); 
          if(webview.canGoBack() && !bool_current_val){ 
              WebBackForwardList mWebBackForwardList = webview.copyBackForwardList(); 
              String historyUrl = mWebBackForwardList.getItemAtIndex(mWebBackForwardList.getCurrentIndex()-1).getUrl(); 
              //Log.e("state1", historyUrl+""); 
              boolean bool_value = VALUES.contains(historyUrl); 
          if(bool_value){ 
          webview.loadUrl("http://도메인네임.com/"); 
          } else { 
          webview.goBack(); 
          } 
          return true; 
          } else { 
              AlertDialog.Builder builder = new AlertDialog.Builder(_activity); 
              builder.setMessage("종료하시겠습니까?") 
              .setTitle("Quit") 
                    .setCancelable(false) 
                    .setNegativeButton("Yes", new DialogInterface.OnClickListener() { 
                        public void onClick(DialogInterface dialog, int id) { 
                            Intent intent = new Intent(Intent.ACTION_MAIN); 
                            intent.addCategory(Intent.CATEGORY_HOME); 
                            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
                            startActivity(intent); 
                            finish(); 
                            android.os.Process.killProcess(android.os.Process.myPid() ); 
                        } 
                    }).setPositiveButton("No", new DialogInterface.OnClickListener() { 
                    public void onClick(DialogInterface dialog, int id) { 
                    dialog.cancel(); 
                    } 
                    }); 

              AlertDialog alert = builder.create();    
              alert.show(); 
          } 
        } 
        return super.onKeyDown(keyCode, event); 
        }
  • 기술레벨커뮤니티레벨영쥬 13-08-08 13:14 

    소스보기

  • 제가질문드린건아니지만..................... 안드로이드쪽에서 문제가 있어서 찾던중이엇는데........ 이 소스 보고 해결됐습니다. 감사합니당 !!! ^^
  • 기술레벨커뮤니티레벨나락 13-01-20 23:03 

    소스보기

  • 방법은 많아보여여... 
    세션시간을 100년으로 잡으시면 되기도 하겠고.... 

    근데 다른 더 좋은 방법도 있을거같아여 ^^;
  • 기술레벨커뮤니티레벨하이랭커 13-01-21 00:28 

    소스보기

  • 세션말구요 ㅠㅠ.... 뒤로가기 버튼이 안먹혔으면 좋겠거든요...
  • 기술레벨커뮤니티레벨kionpark 13-01-21 03:51 

    소스보기

  • 로그인폼->액션->결과페이지 
    액션페이지에서 결과페이지로 이동할 때 document.location.replace로 히스토리삭제 
    혹은, 세션인증 후 로그인관련 페이지 차단 등의 여러가지 방법이 있어요.
  • 기술레벨커뮤니티레벨하이랭커 13-01-21 10:38 

    소스보기

  • 세션인증 후 로그인관련 페이지 차단은 어떻게 하죠 ㅠㅠ?
  • 기술레벨커뮤니티레벨enoeht 13-01-21 11:29 

    소스보기

  • 로그인 페이지에서 ajax를 이용해서 세션여부를 반환하는 페이지를 호출해서, 
    그 결과에 따라 로그인 폼을 보여주시면 되겠네요. 

    그러니까... 기본적으로 로그인 페이지는 display:none시켜두고, ajax로 세션 확인해서 세션 없을때만 보여주고, 세션있으면 return-url이나 메인화면으로 location.replace 시켜버리면 될 것 같네요


반응형