ค้นหาที่อยู่ IP ของผู้ใช้ที่ระบุ UID หรือไม่


8

ฉันใช้งานเว็บไซต์ Drupal 7 ด้วยเกมการ์ดแบบผู้เล่นหลายคนรัสเซียและต้องปิดกั้นผู้เล่นที่น่ารำคาญทุก ๆ 4-5 วัน

ก่อน Drupal ฉันใช้ phpBB 3 เมื่อบุคคลเหล่านี้มาจากเมืองเล็ก ๆ / หมู่บ้านฉันเพิ่งเพิ่มเครือข่าย IP ของพวกเขาไปยังกฎไฟร์วอลล์เพื่อให้พวกเขาไม่สามารถลงทะเบียนด้วยที่อยู่อีเมลใหม่ได้ สิ่งนี้ใช้ได้ดีในกรณีของฉันและคำถามของฉันไม่เกี่ยวกับนโยบายนี้

ปัญหาของฉันคือเมื่อใช้ Drupal ฉันไม่สามารถค้นหาที่อยู่ IP ล่าสุดที่ใช้โดยรหัสผู้ใช้ คือผู้ใช้รายอื่นรายงานการละเมิดของฉันและฉันรู้ว่าเขาโพสต์ แต่ฉันไม่พบที่อยู่ IP ของเขาในบันทึกเพราะ:

  1. ฉันได้เปิดใช้งานการบันทึก syslog และดูข้อความ Drupal ใน / var / log / messagess แต่ไม่ค่อยมีข้อความเกี่ยวกับการเข้าสู่ระบบของผู้ใช้อาจเป็นเพราะเซสชันมีความยาวโดยค่าเริ่มต้นและฉันต้องการให้เป็นแบบนี้ ความสะดวกสบายของผู้ใช้

  2. ฉันได้เปิดใช้งาน "การบันทึกฐานข้อมูลด้วย" แต่ไม่ทราบว่าจะดูจากที่ใด (ตารางฐานข้อมูลใด)

คำตอบ:


9

หากคุณเปิดใช้งานโมดูลสถิติตาราง "accesslog" จะมี IP สำหรับผู้เยี่ยมชมทั้งหมดของคุณ

SELECT hostname FROM accesslog WHERE uid = %UID_FOR_YOUR_USER% LIMIT 1

หากคุณไม่ได้เปิดใช้งานสถิติฉันขอแนะนำให้คุณทิ้งมันไว้แม้สำหรับผลลัพธ์นี้เนื่องจากการเปิดใช้งานมันทำให้เกิดโทษประสิทธิภาพอย่างรุนแรง

ในกรณีนั้นคุณสามารถใช้sessionsตาราง:

SELECT hostname FROM sessions WHERE uid = %UID_FOR_YOUR_USER% LIMIT 1

ประโยชน์ของชื่อแรกคือชื่อแรกจะแสดงชื่อโฮสต์ล่าสุดให้คุณเสมอในขณะที่ชื่อหลังอาจไม่ใช่ชื่อล่าสุดเสมอ


จริงตารางเซสชันมีที่อยู่ IP ด้วย ฉันไม่พบผู้ใช้บางคนที่นั่นเช่นกัน บางทีมันเป็นความผิดของฉัน ฉันจะยอมรับคำตอบของคุณและปิดการใช้งานโมดูล syslog และฐานข้อมูลสถิติเพราะพวกเขาไม่ได้ใช้งานมากสำหรับฉัน
Alexander Farber

ผู้ใช้ที่ไม่ได้เข้าสู่ระบบในขณะที่ไม่มีเซสชันและจะไม่พบ ตามที่ฉันระบุไว้ "หลังจะไม่ทันสมัยเสมอ" ความหมาย: อาจไม่มีผู้ใช้ทั้งหมด
berkes

5

เท่าที่ฉันรู้ Drupal ไม่รายงาน IP ที่ผู้ใช้ใช้ในโปรไฟล์ผู้ใช้ คุณสามารถสร้างโมดูลที่กำหนดเองตรวจสอบ IP ที่ใช้โดยผู้ใช้และบันทึกลงในตารางฐานข้อมูลของคุณเอง จากนั้นคุณสามารถแสดงในโปรไฟล์ผู้ใช้สำหรับผู้ใช้ที่ได้รับอนุญาตถูกต้อง (ตัวอย่างเช่นผู้ใช้ที่ได้รับอนุญาตให้จัดการผู้ใช้)

ฟังก์ชั่นที่คุณต้องการคือIP_ADDRESS ()ซึ่งคุณสามารถใช้ในการดำเนินงานของคุณhook_user_login () การนำhook_user_view () ไปใช้งานคุณสามารถแสดงข้อมูลดังกล่าวให้กับผู้ใช้ได้รับอนุญาต


ขอบคุณ แต่ฉันจะมีปัญหาเช่นเดียวกับตอนนี้: ผู้ใช้ไม่ค่อยเข้าสู่ระบบเท่าที่ฉันเห็นใน syslog และ hook_user_login () จะถูกเรียกก็ต่อเมื่อผู้ใช้ล็อกอิน (ป้อนรหัสผ่าน)
Alexander Farber

คุณสามารถบังคับให้พวกเขาเข้าสู่ระบบ; หากคุณล้างตารางเซสชันผู้ใช้ควรลงชื่อเข้าใช้อีกครั้ง
kiamlaluno

3

หากคุณกำลังใช้โมดูลบันทึกฐานข้อมูล Drupal จะเก็บข้อมูลนี้ไว้ในตารางเฝ้าระวังใต้hostnameคอลัมน์ คุณสามารถเขียนแบบสอบถามที่กำหนดเองเพื่อรับข้อมูลนี้หรือใช้โมดูล Views Watchdog (ปัจจุบันเป็นรุ่น dev สำหรับ 7.x เท่านั้นดังนั้นฉันไม่แน่ใจว่ามันทำงานได้ดีใน Drupal 7) เพื่อแสดงตารางนั้นไปยัง Views


ไม่ตาราง watchdog มีปัญหาเช่นเดียวกับโมดูลหลัก syslog: สำหรับผู้ใช้บางคนฉันไม่มีที่อยู่ IP เพราะพวกเขาเข้าสู่ระบบมานานแล้ว ดังนั้นฉันจึงได้รับรายงานเกี่ยวกับผู้ใช้ที่เป็นอันตรายลองค้นหา IP ของเขาเพื่อเพิ่มลงในกฎดรอปไฟร์วอลล์ของฉัน แต่ฉันไม่พบ IP ของเขาที่ใดก็ได้
Alexander Farber

การตั้งค่าเริ่มต้นสำหรับสุนัขเฝ้าบ้านคือน่าเสียดายที่เก็บข้อความเพียง 1,000 ข้อความเท่านั้น ในเว็บไซต์ที่ใช้งานอยู่สิ่งนี้อาจใช้เวลาเพียงหนึ่งชั่วโมงหรือน้อยกว่านั้น ขึ้นอยู่กับเว็บไซต์ของคุณคุณอาจต้องการชนหมายเลขนั้น (admin / config / development / logging) หรือสร้างโซลูชันหน่วยเก็บข้อมูล IP แบบกำหนดเองตามที่อธิบายโดย kiamlaluno
jhedstrom

1

โมดูลล่าสุดสองโมดูลอาจช่วยในเรื่องนี้:

User IP Logซึ่งมีการรวม Views และIP Address Managerซึ่งไม่มีการรวม Views แต่มีวัตถุประสงค์เพื่อรวมกับ Manifest, Cave Trolls ของคุณและ Misery-- ซึ่งเป็นโมดูลที่เกี่ยวข้องทั้งหมด


-1

session_id ()ให้เซสชั่นผู้ใช้ปัจจุบันแก่คุณไม่ว่าเขา / เธอจะเป็นแขกหรือเป็นสมาชิก

$result = db_query("SELECT hostname FROM sessions WHERE sid = '".session_id()."'");
$data = db_fetch_object($result );
echo $data->hostname;
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.