그누보드의 자동로그인은 세션 보관 시간과는 관련이 없는 것으로 알고 있습니다.

자동로그인 시, 각 사용자의 접속기기에 쿠기(ck_mb_id와 ck_auto)를 저장해두고, 재 접속할 때 저장된 쿠키가 있는지 확인하여 로그인 인증을 하는 방식이기 때문입니다.

이런 점을 고려해 볼 때, 자동로그인이 자주 풀리는 이유는 쿠키로 저장된 값이 재접속 시에 서버에서 원하는 값이 아니기 때문일 겁니다.

이렇게 쿠키로 저장된 값과 서버에서 원하는 쿠키 값이 서로 달라지는 이유는

쿠기값(ck_auto)의 일부인 접속자 ip($_SERVER['REMOTE_ADDR']) 때문인 것으로 생각됩니다.

특히 모바일 환경(와이파이 사용 등...)에서 클라이언트 ip가 고정되기 어렵고, 무선 공유기를 사용하는 PC에서도 클라이언트 ip가 자주 바뀔 수 있기 때문에 쿠키 값이 서로 일치할 가능성이 낮아집니다.

 

다음과 같이 $_SERVER['REMOTE_ADDR'] 변수를 삭제하고 시행해 보세요.

./bbs/login_check.php 파일의 58번째 줄에 보면 다음과 같은 키 설정이 있습니다.

1$key = md5($_SERVER['SERVER_ADDR'] . $_SERVER['REMOTE_ADDR'] . $_SERVER['HTTP_USER_AGENT'] . $mb['mb_password']); // 이부분을 아래와 같이 수정
2$key = md5($_SERVER['SERVER_ADDR'] . $_SERVER['HTTP_USER_AGENT'] . $mb['mb_password']); // $_SERVER['REMOTE_ADDR'] 변수 지움

 

그리고 common.php 파일의 367라인 부분도 수정

1$key = md5($_SERVER['SERVER_ADDR'] . $_SERVER['REMOTE_ADDR'] . $_SERVER['HTTP_USER_AGENT'] . $mb['mb_password']); // 이부분을 아래와 같이 수정
2$key = md5($_SERVER['SERVER_ADDR'] . $_SERVER['HTTP_USER_AGENT'] . $mb['mb_password']); // $_SERVER['REMOTE_ADDR'] 변수 지움




자동로그인은 완벽한게 아닙니다. 사용자의 접속 환경에 따라 다르기 때문에 자주 풀리게 될 수 있습니다.

 

쿠키삭제 프로그램 같은(PC최적화, 정리프로그램) 자동실행된다며 풀릴수 있습니다.



웹스토리지

http://www.w3schools.com/html/html5_webstorage.asp


https://developers.google.com/chart/interactive/docs/gallery



선형 차트

<html>
 
<head>
   
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
   
<script type="text/javascript">
      google
.load("visualization", "1", {packages:["corechart"]});
      google
.setOnLoadCallback(drawChart);
     
function drawChart() {
       
var data = google.visualization.arrayToDataTable([
         
['Year', 'Sales', 'Expenses'],
         
['2004',  1000,      400],
         
['2005',  1170,      460],
         
['2006',  660,       1120],
         
['2007',  1030,      540]
       
]);

       
var options = {
          title
: 'Company Performance'
       
};

       
var chart = new google.visualization.LineChart(document.getElementById('chart_div'));
        chart
.draw(data, options);
     
}
   
</script>
 
</head>
 
<body>
   
<div id="chart_div" style="width: 900px; height: 500px;"></div>
 
</body>
</html>



'자바스크립트' 카테고리의 다른 글

jquery - select option 선택값 가져오기  (0) 2018.01.22
datepicker 특정요일  (0) 2018.01.14
구글지도 내위치  (0) 2017.12.31
jquery get 한글 깨짐  (0) 2017.12.30
카카오톡 친구 맺기  (0) 2017.12.29

회사 서버에선 이상이 없던 솔루션이 다른업체 서버에선 insert, update만 하려고 하면 아래와 같은 에러가 떴다.


incorrect integer value: '' for column


에러 내용만 읽어봐도 왜 그런지 답이 나온다. 

정수형 필드에 '' 값이 들어가기 때문이다.


시간이 없으니 수천개의 파일을 일일히 수정할수는 없으니 미칠 노릇이였다.

구글링 끝에 찾아낸 방법은 my.ini 수정이였다.


sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

위와 같은 sql-mode에서


sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

STRICT_TRANS_TABLES를 없애면 된다.


my.ini 변경하고 mysql 재시작하면 적용완료. 이상없음 확인 끝.


'MYSQL' 카테고리의 다른 글

create index  (0) 2018.02.15
index 확인  (0) 2018.02.15
MYSQL 파티셔닝  (0) 2017.12.31
mysql alter table  (0) 2017.12.30
Can't find record in  (0) 2017.12.30

MySQL에서는 대용량 데이터 관리를 위해 파티셔닝을 지원한다

(스토리지가 MyISAM이나 InnoDB 상관없이 지원하며 5.1 이상부터 지원)


우선 파티션을 나누기전에 CREATE시에 파티션을 설정해줘야 하며 그 이후부터 파티션추가는 ALTER 문으로 가능하다.

즉, 이미 파티션을 나누지 않은 일반 테이블이 있다면 삭제 후 다시 CREATE를 해줘야 한다.


파티션을 추가하는 것은 아래와 같다

CREATE TABLE `테이블` (

...

)

PARTITION BY RANGE (to_days(날짜컬럼)) (

    PARTITION p201709 VALUES LESS THAN ( to_days('2017-08-01 00:00:00') ) ENGINE=InnoDB,

    PARTITION p_max VALUES LESS THAN MAXVALUE ENGINE=InnoDB

);


위 파티션을 월단위로 파티션을 나눠놓은것으로 month함수는 지원하지 않으므로 to_days 함수를 통해 날짜컬럼을 기준으로 RANGE 형태

파티션을 나눈 것이다.(그래서 THAN() 에서 괄호안에 보통 날짜를 입력하면 되지만 unix time값으로 작성해야 하므로 함수를 이용)


여기서 주의할 점은 CREATE문이 생략됏는데, PRIMARY KEY를 보통 AI만 할텐데, 반드시 파티션을 나누는 기준이 되는 날짜컬럼을 같이 지정해줘야 한다.

즉, AI 값과 파티션 기준값을 같이 묶어서 PK로 지정해줘야 한다.


파티션을 년단위로 나눌경우는 to_days함수대신 year함수를 쓰면되고 THAN(값)에는 년도를 입력하면 된다.


파티션으로 나눠놓은 날짜보다 더 이전의 날짜의 데이터는 최소단위 파티션에 쌓이고, 그보다 더 큰 날짜의 데이터는 MAXVALUE로 지정한 p_max(예시) 에 쌓인다.


파티션 추가는 아래 명령어를 사용하며, 해당 날짜에 맞춰서 기존 데이터가 생성된 파티션으로 이동한다.

ALTER TABLE `테이블` PARTITION BY RANGE(함수(`필드명`)) (

    PARTITION `파티션명` VALUES LESS THAN (값),

    PARTITION `파티션명` VALUES LESS THAN (값)

)


여기서 주의할점은 이미 MAXVALUE가 설정이 된 경우는 마지막 날짜 기준 뒤의 날짜는 파티션추가가 안되므로 파티션을 재구성 해야한다

파티션 재구성은 아래와 같다

ALTER TABLE TBL_REQUEST_RESULT REORGANIZE PARTITION p_max INTO (

    PARTITION p201710 VALUES LESS THAN (to_days('2017-09-01 00:00:00')) ENGINE=InnoDB,

    PARTITION p_max VALUES LESS THAN MAXVALUE ENGINE = InnoDB

);


파티션 삭제는 아래 명령어를 사용하며, 해당 파티션에 저장된 데이터는 삭제된다.

ALTER TABLE `테이블` DROP PARTITION `파티션명`;


파티션 확인 및 관리 명령어는 아래와 같다.

SHOW VARIABLES LIKE '%partition%'

ALTER TABLE REBUILD PARTITION;

ALTER TABLE OPTIMIZE PARTITION;

ALTER TABLE ANALYZE PARTITION;

ALTER TABLE REPAIR PARTITION;

ALTER TABLE CHECK PARTITION;


파티션 완전 삭제 명령어는 아래와 같다.

ALTER TABLE `테이블` REMOVE PARTITIONING;


'MYSQL' 카테고리의 다른 글

index 확인  (0) 2018.02.15
incorrect integer value: '' for column  (0) 2018.01.05
mysql alter table  (0) 2017.12.30
Can't find record in  (0) 2017.12.30
Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'  (0) 2017.12.29
getCurrentPosition + Googlemap marker

'자바스크립트' 카테고리의 다른 글

datepicker 특정요일  (0) 2018.01.14
구글 선형 챠트  (0) 2018.01.06
jquery get 한글 깨짐  (0) 2017.12.30
카카오톡 친구 맺기  (0) 2017.12.29
카카오 링크 자바스크립트 예제(kakao link javascript example)  (0) 2017.12.29

jquery 파라메타

  -> encodeURIComponent(tt)


php request

  -> rawurldecode(aa)


필드 추가

alter table 테이블명 add 추가필드명 varchar(10) default '';


필드 제거

alter table 테이블명 drop 제거필드명;


필드 수정

alter table 테이블명 modify 수정필드명 varchar(10) default ''


'MYSQL' 카테고리의 다른 글

incorrect integer value: '' for column  (0) 2018.01.05
MYSQL 파티셔닝  (0) 2017.12.31
Can't find record in  (0) 2017.12.30
Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'  (0) 2017.12.29
mysql dump 넣기 import  (0) 2017.12.29

Can't find record in ... 


에러가 발생하는건 master와 slave 간에 데이터가 일치 하지 않을때 발생합니다.


master와 slave의 데이터를 맞춰 줘야 해결이 됩니다.

'MYSQL' 카테고리의 다른 글

incorrect integer value: '' for column  (0) 2018.01.05
MYSQL 파티셔닝  (0) 2017.12.31
mysql alter table  (0) 2017.12.30
Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'  (0) 2017.12.29
mysql dump 넣기 import  (0) 2017.12.29

그누에서 간단하게 '핸드폰인증'으로 인증페이지를 만든 샘플을 올립니다.

 

페이지 구성

1. index.php : 인증창 오픈

2. sms.php : 핸드폰인증 진행

   - 10분이내 5번 요청하면 잠시후에 진행하라는 경고창이 나옵니다.

   - 인증번호는 5자리로 랜덤하게 만들어집니다.

   - 인증이 완료된후에 이벤트는 authCheck 에서 추가하신후에 이용하시면 됩니다.

 

필요 테이블

CREATE TABLE IF NOT EXISTS `sms_auth` (
  `a_idx` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `a_hp` varchar(20) NOT NULL,
  `a_auth` int(10) NOT NULL DEFAULT 0,
  `a_num` varchar(5) NOT NULL DEFAULT '',
  `a_regdate` datetime DEFAULT NULL,
  PRIMARY KEY (`a_idx`)
);

sms.zip


'PHP 프로그래밍' 카테고리의 다른 글

euc-kr에서 독일어  (0) 2018.01.08
그누보드 자동로그인  (0) 2018.01.08
구글 지도 이용한 거리 계산  (0) 2017.12.29
php include 된 파일 파악  (0) 2017.12.29
Fatal error : Allowed memory size of 에러  (0) 2017.12.28

옐로우아디가 있는 경우


http://goto.kakao.com/@아이디


로 링크시 카톡친구추가 페이지로 이동됨





+ Recent posts